示例#1
0
 def test_bad_criteria_headers(self):
     with patch('services.import_export.SELECTION_CRITERIA_HEADINGS'
                ) as headings:
         headings[:] = ['foo', 'bar']
         xlwt_book = make_empty_book()
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#2
0
 def validate(self, attrs):
     user = self.context['request'].user
     data = attrs['file'].read()
     errs = validate_and_import_data(user, data)
     if errs:
         raise DRFValidationError(errs)
     return attrs
示例#3
0
 def validate(self, attrs):
     user = self.context['request'].user
     data = attrs['file'].read()
     errs = validate_and_import_data(user, data)
     if errs:
         raise DRFValidationError(errs)
     return attrs
示例#4
0
 def test_too_many_sheets(self):
     xlwt_book = xlwt.Workbook(encoding='utf-8')
     xlwt_book.add_sheet(PROVIDER_SHEET_NAME)
     xlwt_book.add_sheet(SERVICES_SHEET_NAME)
     xlwt_book.add_sheet(PROVIDER_SHEET_NAME + 'b')
     xlwt_book.add_sheet(SERVICES_SHEET_NAME + 'b')
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#5
0
 def test_empty_book(self):
     # A book with just 3 empty sheets should not validate
     xlwt_book = xlwt.Workbook(encoding='utf-8')
     xlwt_book.add_sheet('x' + PROVIDER_SHEET_NAME)
     xlwt_book.add_sheet(SERVICES_SHEET_NAME)
     xlwt_book.add_sheet(SELECTION_CRITERIA_SHEET_NAME)
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#6
0
 def test_empty_book(self):
     # A book with just 3 empty sheets should not validate
     xlwt_book = xlwt.Workbook(encoding='utf-8')
     xlwt_book.add_sheet('x' + PROVIDER_SHEET_NAME)
     xlwt_book.add_sheet(SERVICES_SHEET_NAME)
     xlwt_book.add_sheet(SELECTION_CRITERIA_SHEET_NAME)
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#7
0
 def test_too_many_sheets(self):
     xlwt_book = xlwt.Workbook(encoding='utf-8')
     xlwt_book.add_sheet(PROVIDER_SHEET_NAME)
     xlwt_book.add_sheet(SERVICES_SHEET_NAME)
     xlwt_book.add_sheet(PROVIDER_SHEET_NAME + 'b')
     xlwt_book.add_sheet(SERVICES_SHEET_NAME + 'b')
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
 def test_using_export_url_to_get_export(self):
     provider = ProviderFactory(user=self.user)
     ServiceFactory(provider=provider, status=Service.STATUS_CURRENT)
     url = self.get_export_url()
     rsp = self.client.get(url)
     self.assertEqual(OK, rsp.status_code)
     bits = rsp.content
     errs = validate_and_import_data(self.user, bits)
     self.assertFalse(errs)
示例#9
0
 def test_bad_provider_sheet_name(self):
     # Wrong sheet name should not validate
     xlwt_book = xlwt.Workbook(encoding='utf-8')
     provider_sheet = xlwt_book.add_sheet('x' + PROVIDER_SHEET_NAME)
     add_models_to_sheet(provider_sheet, PROVIDER_HEADINGS, [])
     service_sheet = xlwt_book.add_sheet(SERVICES_SHEET_NAME)
     add_models_to_sheet(service_sheet, SERVICE_HEADINGS, [])
     criteria_sheet = xlwt_book.add_sheet(SELECTION_CRITERIA_SHEET_NAME)
     add_models_to_sheet(criteria_sheet, SELECTION_CRITERIA_HEADINGS, [])
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#10
0
 def test_bad_provider_sheet_name(self):
     # Wrong sheet name should not validate
     xlwt_book = xlwt.Workbook(encoding='utf-8')
     provider_sheet = xlwt_book.add_sheet('x' + PROVIDER_SHEET_NAME)
     add_models_to_sheet(provider_sheet, PROVIDER_HEADINGS, [])
     service_sheet = xlwt_book.add_sheet(SERVICES_SHEET_NAME)
     add_models_to_sheet(service_sheet, SERVICE_HEADINGS, [])
     criteria_sheet = xlwt_book.add_sheet(SELECTION_CRITERIA_SHEET_NAME)
     add_models_to_sheet(criteria_sheet, SELECTION_CRITERIA_HEADINGS, [])
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#11
0
 def test_not_spreadsheet(self):
     errs = validate_and_import_data(self.user, b'I am not a spreadsheet')
     self.assertTrue(errs)
    def test_random_data(self):
        provider = ProviderFactory()
        service1 = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT)
        service2 = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT)
        ServiceFactory(provider=provider, status=Service.STATUS_CURRENT)
        # Some additional services that should not show up
        ServiceFactory(status=Service.STATUS_CURRENT)  # not one of the providers we want
        ServiceFactory(provider=provider, status=Service.STATUS_DRAFT)  # Draft mode
        SelectionCriterionFactory(service=service1)
        SelectionCriterionFactory(service=service2)
        SelectionCriterionFactory()  # unwanted service

        # Querysets of just the objects we expect to be exported
        providers = Provider.objects.order_by('id')
        services = Service.objects.filter(status=Service.STATUS_CURRENT,
                                          provider__in=providers).order_by('id')
        criteria = SelectionCriterion.objects.filter(service__status=Service.STATUS_CURRENT,
                                                     service__provider__in=providers).order_by('id')

        xlwt_book = get_export_workbook(providers)
        book = save_and_read_book(xlwt_book)

        # First sheet - providers
        sheet = book.get_sheet(0)
        self.assertEqual(providers.count(), sheet.nrows - 1)
        self.assertEqual(PROVIDER_HEADINGS, sheet.row_values(0))
        for i, rownum in enumerate(range(1, sheet.nrows)):
            values = sheet.row_values(rownum)
            provider = providers[i]
            data = dict(zip(PROVIDER_HEADINGS, values))
            self.assertEqual(provider.id, data['id'])
            self.assertEqual(provider.name_ar, data['name_ar'])

        # Second sheet = services
        sheet = book.get_sheet(1)
        self.assertEqual(services.count(), sheet.nrows - 1)
        self.assertEqual(SERVICE_HEADINGS, sheet.row_values(0))
        for i, rownum in enumerate(range(1, sheet.nrows)):
            values = sheet.row_values(rownum)
            service = services[i]
            data = dict(zip(SERVICE_HEADINGS, values))
            self.assertEqual(service.id, data['id'])
            self.assertEqual(service.name_ar, data['name_ar'])
            provider = Provider.objects.get(id=data['provider__id'])
            self.assertEqual(provider, service.provider)

        # Third sheet - selection criteria
        sheet = book.get_sheet(2)
        self.assertEqual(SELECTION_CRITERIA_HEADINGS, sheet.row_values(0))
        self.assertEqual(criteria.count(), sheet.nrows - 1)
        for i, rownum in enumerate(range(1, sheet.nrows)):
            values = sheet.row_values(rownum)
            criterion = criteria[i]
            data = dict(zip(SELECTION_CRITERIA_HEADINGS, values))
            self.assertEqual(criterion.id, data['id'])
            self.assertEqual(criterion.text_ar, data['text_ar'])
            service = Service.objects.get(id=data['service__id'])
            self.assertEqual(service, criterion.service)

        # The exported workbook should also be valid for import by
        # a staff user
        user = EmailUserFactory(is_staff=True)
        validate_and_import_data(user, get_book_bits(xlwt_book))
示例#13
0
 def test_headers_only_book(self):
     # An book with only headers should validate
     xlwt_book = make_empty_book()
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertFalse(errs)
示例#14
0
 def test_bad_provider_headers(self):
     with patch('services.import_export.PROVIDER_HEADINGS') as headings:
         headings[:] = ['foo', 'bar']
         xlwt_book = make_empty_book()
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#15
0
 def test_headers_only_book(self):
     # An book with only headers should validate
     xlwt_book = make_empty_book()
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertFalse(errs)
示例#16
0
 def test_bad_provider_headers(self):
     with patch('services.import_export.PROVIDER_HEADINGS') as headings:
         headings[:] = ['foo', 'bar']
         xlwt_book = make_empty_book()
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#17
0
 def test_bad_criteria_headers(self):
     with patch('services.import_export.SELECTION_CRITERIA_HEADINGS') as headings:
         headings[:] = ['foo', 'bar']
         xlwt_book = make_empty_book()
     errs = validate_and_import_data(self.user, get_book_bits(xlwt_book))
     self.assertTrue(errs)
示例#18
0
 def test_not_spreadsheet(self):
     errs = validate_and_import_data(self.user, b'I am not a spreadsheet')
     self.assertTrue(errs)