From 9cf8c02dc65615e4750b1181a60f8e1dbd5fd4bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20Andr=C3=A9s=20Rocha?= Date: Wed, 22 Aug 2012 14:23:36 -0400 Subject: [PATCH] Added import_serial_numbers command test. --- lms/djangoapps/licenses/tests.py | 85 ++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 lms/djangoapps/licenses/tests.py diff --git a/lms/djangoapps/licenses/tests.py b/lms/djangoapps/licenses/tests.py new file mode 100644 index 0000000000..f06899d2de --- /dev/null +++ b/lms/djangoapps/licenses/tests.py @@ -0,0 +1,85 @@ +import logging +from uuid import uuid4 +from random import shuffle +from tempfile import NamedTemporaryFile + +from django.test import TestCase +from django.core.management import call_command + +from models import CourseSoftware, UserLicense + +COURSE_1 = 'MITx/6.002x/2012_Fall' + +SOFTWARE_1 = 'matlab' +SOFTWARE_2 = 'stata' + +log = logging.getLogger(__name__) + + +class CommandTest(TestCase): + def test_import_serial_numbers(self): + size = 20 + + log.debug('Adding one set of serials for {0}'.format(SOFTWARE_1)) + with generate_serials_file(size) as temp_file: + args = [COURSE_1, SOFTWARE_1, temp_file.name] + call_command('import_serial_numbers', *args) + + log.debug('Adding one set of serials for {0}'.format(SOFTWARE_2)) + with generate_serials_file(size) as temp_file: + args = [COURSE_1, SOFTWARE_2, temp_file.name] + call_command('import_serial_numbers', *args) + + log.debug('There should be only 2 course-software entries') + software_count = CourseSoftware.objects.all().count() + self.assertEqual(2, software_count) + + log.debug('We added two sets of {0} serials'.format(size)) + licenses_count = UserLicense.objects.all().count() + self.assertEqual(2 * size, licenses_count) + + log.debug('Adding more serial numbers to {0}'.format(SOFTWARE_1)) + with generate_serials_file(size) as temp_file: + args = [COURSE_1, SOFTWARE_1, temp_file.name] + call_command('import_serial_numbers', *args) + + log.debug('There should be still only 2 course-software entries') + software_count = CourseSoftware.objects.all().count() + self.assertEqual(2, software_count) + + log.debug('Now we should have 3 sets of 20 serials'.format(size)) + licenses_count = UserLicense.objects.all().count() + self.assertEqual(3 * size, licenses_count) + + cs = CourseSoftware.objects.get(pk=1) + + lics = UserLicense.objects.filter(software=cs)[:size] + known_serials = list(l.serial for l in lics) + known_serials.extend(generate_serials(10)) + + shuffle(known_serials) + + log.debug('Adding some new and old serials to {0}'.format(SOFTWARE_1)) + with NamedTemporaryFile() as f: + f.write('\n'.join(known_serials)) + f.flush() + args = [COURSE_1, SOFTWARE_1, f.name] + call_command('import_serial_numbers', *args) + + log.debug('Check if we added only the new ones') + licenses_count = UserLicense.objects.filter(software=cs).count() + self.assertEqual((2 * size) + 10, licenses_count) + + +def generate_serials(size=20): + return [str(uuid4()) for _ in range(size)] + + +def generate_serials_file(size=20): + serials = generate_serials(size) + + temp_file = NamedTemporaryFile() + temp_file.write('\n'.join(serials)) + temp_file.flush() + + return temp_file