Statistics
| Branch: | Tag: | Revision:

root / logic / tests.py @ 76cc889c

History | View | Annotate | Download (4.4 kB)

1 09c936a7 Vassilios Karakoidas
#
2 09c936a7 Vassilios Karakoidas
# Unit Tests for logic
3 09c936a7 Vassilios Karakoidas
#
4 09c936a7 Vassilios Karakoidas
# Provides automated tests for logic module
5 09c936a7 Vassilios Karakoidas
#
6 09c936a7 Vassilios Karakoidas
# Copyright 2010 Greek Research and Technology Network
7 09c936a7 Vassilios Karakoidas
#
8 92c53da1 Vassilios Karakoidas
9 420f2c20 Georgios Gousios
from synnefo.db.models import *
10 92c53da1 Vassilios Karakoidas
11 420f2c20 Georgios Gousios
from synnefo.logic import credits
12 420f2c20 Georgios Gousios
from synnefo.logic import users
13 92c53da1 Vassilios Karakoidas
14 92c53da1 Vassilios Karakoidas
from django.test import TestCase
15 92c53da1 Vassilios Karakoidas
16 8d97deff Vassilios Karakoidas
class CostsTestCase(TestCase):
17 8d97deff Vassilios Karakoidas
    fixtures = [ 'db_test_data' ]
18 8d97deff Vassilios Karakoidas
19 8d97deff Vassilios Karakoidas
    def test_get_costs(self):
20 8d97deff Vassilios Karakoidas
        """Test the Flavor cost-related methods method"""
21 8d97deff Vassilios Karakoidas
        # first an easy test, a Flavor with only one FlavorCost entry
22 8d97deff Vassilios Karakoidas
        flavor = Flavor.objects.get(pk=30001)
23 8d97deff Vassilios Karakoidas
24 8d97deff Vassilios Karakoidas
        start_date = datetime.datetime(year=2010, month=1, day=1)
25 8d97deff Vassilios Karakoidas
        end_date = datetime.datetime(year=2010, month=1, day=2)
26 8d97deff Vassilios Karakoidas
27 8d97deff Vassilios Karakoidas
        # we now that the cost should be 5*24 (inactive) and 10*24 (active)
28 8d97deff Vassilios Karakoidas
        r_active = credits.get_cost_active(flavor, start_date, end_date)
29 8d97deff Vassilios Karakoidas
        r_inactive = credits.get_cost_inactive(flavor, start_date, end_date)
30 8d97deff Vassilios Karakoidas
31 8d97deff Vassilios Karakoidas
        self.assertEqual(len(r_active), 1, 'get_cost_active() should have returned 1 entry (%d)' %(len(r_active),))
32 8d97deff Vassilios Karakoidas
        self.assertEqual(len(r_inactive), 1, 'get_cost_inactive() should have returned 1 entry (%d)'% (len(r_inactive),))
33 8d97deff Vassilios Karakoidas
34 8d97deff Vassilios Karakoidas
        self.assertEqual(10*24, r_active[0][1], 'get_cost_active() is not working properly (%d!=%d)' % (r_active[0][1], 10*24))
35 8d97deff Vassilios Karakoidas
        self.assertEqual(5*24, r_inactive[0][1], 'get_cost_inactive() is not working properly (%d!=%d)' % (r_inactive[0][1], 5*24))
36 8d97deff Vassilios Karakoidas
37 8d97deff Vassilios Karakoidas
        # The second test, will involve a more complex cost example
38 8d97deff Vassilios Karakoidas
        # The overall cost will be calculated by two FlavorCost entries
39 8d97deff Vassilios Karakoidas
40 8d97deff Vassilios Karakoidas
        flavor = Flavor.objects.get(pk=30000)
41 8d97deff Vassilios Karakoidas
42 8d97deff Vassilios Karakoidas
        start_date = datetime.datetime(year=2010, month=12, day=31)
43 8d97deff Vassilios Karakoidas
        end_date = datetime.datetime(year=2011, month=01, day=2)
44 8d97deff Vassilios Karakoidas
45 8d97deff Vassilios Karakoidas
        # this is more complicated, active costs are 5*24 + 10*24 = 360
46 8d97deff Vassilios Karakoidas
        # and inactive costs are 2*24 + 5*24 = 168
47 8d97deff Vassilios Karakoidas
48 8d97deff Vassilios Karakoidas
        r_active = credits.get_cost_active(flavor, start_date, end_date)
49 8d97deff Vassilios Karakoidas
        r_inactive = credits.get_cost_inactive(flavor, start_date, end_date)
50 8d97deff Vassilios Karakoidas
51 8d97deff Vassilios Karakoidas
        self.assertEqual(len(r_active), 2, 'get_cost_active() should have returned 2 entries (%d)' %(len(r_active),))
52 8d97deff Vassilios Karakoidas
        self.assertEqual(len(r_inactive), 2, 'get_cost_inactive() should have returned 2 entries (%d)'% (len(r_inactive),))
53 8d97deff Vassilios Karakoidas
54 8d97deff Vassilios Karakoidas
        ta_cost = sum([x[1] for x in r_active])
55 8d97deff Vassilios Karakoidas
        tia_cost = sum([x[1] for x in r_inactive])
56 8d97deff Vassilios Karakoidas
57 8d97deff Vassilios Karakoidas
        self.assertEqual(360, ta_cost, 'get_cost_active() is not working properly (%d!=%d)' % (ta_cost, 360))
58 8d97deff Vassilios Karakoidas
        self.assertEqual(168, tia_cost, 'get_cost_inactive() is not working properly (%d!=%d)' % (tia_cost, 168))
59 92c53da1 Vassilios Karakoidas
60 8d97deff Vassilios Karakoidas
        
61 92c53da1 Vassilios Karakoidas
class ChargeTestCase(TestCase):
62 92c53da1 Vassilios Karakoidas
    fixtures = [ 'db_test_data' ]
63 92c53da1 Vassilios Karakoidas
64 92c53da1 Vassilios Karakoidas
    def test_charge_method(self):
65 92c53da1 Vassilios Karakoidas
        """Test VirtualMachine.charge() method"""
66 92c53da1 Vassilios Karakoidas
67 92c53da1 Vassilios Karakoidas
        # Since we have tested the costs, with this test
68 92c53da1 Vassilios Karakoidas
        # we must ensure the following:
69 92c53da1 Vassilios Karakoidas
        # 1. The vm.charged is updated
70 92c53da1 Vassilios Karakoidas
        # 2. Users credits are decreased
71 92c53da1 Vassilios Karakoidas
72 92c53da1 Vassilios Karakoidas
        vm_started = VirtualMachine.objects.get(pk=30000)
73 92c53da1 Vassilios Karakoidas
74 92c53da1 Vassilios Karakoidas
        initial_date = vm_started.charged
75 92c53da1 Vassilios Karakoidas
        initial_credits = vm_started.owner.credit
76 92c53da1 Vassilios Karakoidas
77 92c53da1 Vassilios Karakoidas
        credits.charge(vm_started)
78 92c53da1 Vassilios Karakoidas
79 92c53da1 Vassilios Karakoidas
        self.assertTrue(vm_started.charged > initial_date, 'Initial charged date should not be greater')
80 92c53da1 Vassilios Karakoidas
        self.assertTrue(initial_credits > vm_started.owner.credit, 'The user should have less credits now! (%d>%d)' % (initial_credits, vm_started.owner.credit))
81 92c53da1 Vassilios Karakoidas
82 92c53da1 Vassilios Karakoidas
83 8d97deff Vassilios Karakoidas
class DebitAccountTestCase(TestCase):
84 92c53da1 Vassilios Karakoidas
    fixtures = [ 'db_test_data' ]
85 92c53da1 Vassilios Karakoidas
86 8d97deff Vassilios Karakoidas
    def test_debit_account(self):
87 92c53da1 Vassilios Karakoidas
        """Test a SynnefoUser object"""
88 92c53da1 Vassilios Karakoidas
        s_user = SynnefoUser.objects.get(pk=30000)
89 92c53da1 Vassilios Karakoidas
        v_machine = VirtualMachine.objects.get(pk=30000)
90 92c53da1 Vassilios Karakoidas
91 92c53da1 Vassilios Karakoidas
        # charge the user
92 92c53da1 Vassilios Karakoidas
        credits.debit_account(s_user, 10, v_machine, "This should be a structured debit message!")
93 92c53da1 Vassilios Karakoidas
94 92c53da1 Vassilios Karakoidas
        # should have only one debit object
95 92c53da1 Vassilios Karakoidas
        d_list = Debit.objects.all()
96 92c53da1 Vassilios Karakoidas
97 8d97deff Vassilios Karakoidas
        self.assertEqual(len(d_list), 1, 'debit_account() writes more than one or zero (%d) debit entries!' % ( len(d_list), ))
98 92c53da1 Vassilios Karakoidas
99 92c53da1 Vassilios Karakoidas
        # retrieve the user, now he/she should have zero credits
100 92c53da1 Vassilios Karakoidas
        s_user = SynnefoUser.objects.get(pk=30000)
101 92c53da1 Vassilios Karakoidas
102 92c53da1 Vassilios Karakoidas
        self.assertEqual(0, s_user.credit, 'SynnefoUser (pk=30000) should have zero credits (%d)' % ( s_user.credit, ))
103 420f2c20 Georgios Gousios
104 420f2c20 Georgios Gousios
class AuthTestCase(TestCase):
105 420f2c20 Georgios Gousios
    fixtures = [ 'db_test_data' ]
106 420f2c20 Georgios Gousios
    
107 420f2c20 Georgios Gousios
    def test_register_student(self):
108 420f2c20 Georgios Gousios
        users.register_student ("Jimmy Page", "jpage", "jpage@zoso.com")
109 420f2c20 Georgios Gousios
        user = SynnefoUser.objects.get(name = "jpage")
110 76cc889c Georgios Gousios
111 76cc889c Georgios Gousios
        self.assertNotEquals(user, None)