def make_empty_book(): """ Return an xlwt Workbook object with our sheets & column headings, but no data. :return: an xlwt Workbook object """ return get_export_workbook([])
def test_provider_delete_provider(self): # A provider cannot delete themselves provider = ProviderFactory(user=self.user) book = get_export_workbook([provider], cell_overwrite_ok=True) blank_out_row_for_testing(book, sheet_num=0, row_num=1) rsp = self.import_book(book) self.assertContains(rsp, "Only staff may delete providers", status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_add_provider(self): type = ProviderTypeFactory() provider = ProviderFactory.build(type=type, user=self.user) # Doesn't save self.assertFalse(provider.id) book = get_export_workbook([provider]) rsp = self.import_book(book) # self.fail(rsp.content.decode('utf-8')) self.assertContains(rsp, "Non-staff users may not create new providers", status_code=BAD_REQUEST)
def test_staff_add_provider(self): type = ProviderTypeFactory() self.user.is_staff = True self.user.save() provider = ProviderFactory.build(type=type, user=self.user) # Doesn't save self.assertFalse(provider.id) book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertTrue(Provider.objects.filter(name_en=provider.name_en).exists())
def test_staff_delete_provider(self): # Staff may delete providers self.user.is_staff = True self.user.save() provider = ProviderFactory() book = get_export_workbook([provider], cell_overwrite_ok=True) blank_out_row_for_testing(book, sheet_num=0, row_num=1) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertFalse(Provider.objects.filter(id=provider.id).exists())
def test_provider_delete_another_provider(self): # A provider cannot delete others provider = ProviderFactory() book = get_export_workbook([provider], cell_overwrite_ok=True) blank_out_row_for_testing(book, sheet_num=0, row_num=1) rsp = self.import_book(book) self.assertContains(rsp, "provider: %d is not a provider this user may delete" % provider.id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_change_password(self): # Providers can change their password provider = ProviderFactory(user=self.user) book = get_export_workbook([provider], cell_overwrite_ok=True) password_column = PROVIDER_HEADINGS.index('password') set_cell_value(book, 0, 1, password_column, 'new_password') rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) user = authenticate(email=provider.user.email, password='******') self.assertEqual(user, self.user)
def test_provider_bad_criterion_id(self): provider = ProviderFactory(user=self.user) service = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT) criterion1 = SelectionCriterionFactory.build(service=service) criterion1.id = 'abc' book = get_export_workbook([provider], None, [criterion1]) rsp = self.import_book(book) self.assertContains(rsp, "Row 2: id: %s is not a valid ID" % criterion1.id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_change_nonexistent_criterion(self): provider = ProviderFactory(user=self.user) service = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT) criterion1 = SelectionCriterionFactory(service=service) book = get_export_workbook([provider], None, [criterion1]) crit_id = criterion1.id criterion1.delete() rsp = self.import_book(book) self.assertContains(rsp, "Row 2: id: No selection criterion with id = %s" % crit_id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_add_criterion_bad_service(self): provider = ProviderFactory(user=self.user) criterion1 = SelectionCriterionFactory.build() service = criterion1.service book = get_export_workbook([provider], None, [criterion1]) rsp = self.import_book(book) self.assertContains(rsp, "Row 2: service__id: Selection criterion refers to service with ID " "or name '%s' that is not in the 2nd sheet" % service.name_en, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_change_anothers_password(self): # Providers cannot change another provider's password provider = ProviderFactory() book = get_export_workbook([provider], cell_overwrite_ok=True) password_column = PROVIDER_HEADINGS.index('password') set_cell_value(book, 0, 1, password_column, 'new_password') rsp = self.import_book(book) self.assertEqual(BAD_REQUEST, rsp.status_code, msg=rsp.content.decode('utf-8')) user = authenticate(email=provider.user.email, password='******') self.assertIsNone(user)
def test_staff_add_provider(self): type = ProviderTypeFactory() self.user.is_staff = True self.user.save() provider = ProviderFactory.build(type=type, user=self.user) # Doesn't save self.assertFalse(provider.id) book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertTrue( Provider.objects.filter(name_en=provider.name_en).exists())
def test_provider_bad_criteria(self): provider = ProviderFactory(user=self.user) service = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT) criterion1 = SelectionCriterionFactory(service=service) criterion2 = SelectionCriterionFactory(service=service) # Change the 2nd one's text before exporting criterion2.text_en = criterion2.text_ar = criterion2.text_fr = '' book = get_export_workbook([provider], None, [criterion1, criterion2]) rsp = self.import_book(book) self.assertContains(rsp, "Selection criterion must have text in at least one language", status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_delete_another_provider(self): # A provider cannot delete others provider = ProviderFactory() book = get_export_workbook([provider], cell_overwrite_ok=True) blank_out_row_for_testing(book, sheet_num=0, row_num=1) rsp = self.import_book(book) self.assertContains( rsp, "provider: %d is not a provider this user may delete" % provider.id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_add_criterion_bad_service(self): provider = ProviderFactory(user=self.user) criterion1 = SelectionCriterionFactory.build() service = criterion1.service book = get_export_workbook([provider], None, [criterion1]) rsp = self.import_book(book) self.assertContains( rsp, "Row 2: service__id: Selection criterion refers to service with ID " "or name '%s' that is not in the 2nd sheet" % service.name_en, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_staff_change_provider_password(self): # Staff can change anyone's password self.user.is_staff = True self.user.save() provider = ProviderFactory() book = get_export_workbook([provider], cell_overwrite_ok=True) password_column = PROVIDER_HEADINGS.index('password') set_cell_value(book, 0, 1, password_column, 'new_password') rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) user = authenticate(email=provider.user.email, password='******') self.assertEqual(user, provider.user)
def test_staff_add_services(self): # Staff can add services to any provider self.user.is_staff = True self.user.save() provider = ProviderFactory() type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory.build(provider=provider, type=type, area_of_service=area) book = get_export_workbook([provider], [service]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_service = Service.objects.get(name_en=service.name_en) self.assertEqual(new_service.name_en, service.name_en)
def test_provider_change_nonexistent_service(self): provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(provider=provider, type=type, area_of_service=area) service.name_en = 'Radiator Repair' service.name_fr = 'Le Marseilles' book = get_export_workbook([provider], [service]) service_id = service.id service.delete() rsp = self.import_book(book) self.assertContains(rsp, "%d is not a service this user may import" % service_id, status_code=BAD_REQUEST)
def test_provider_add_anothers_service(self): # A provider can't add a service to another provider provider = ProviderFactory() type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory.build(provider=provider, type=type, area_of_service=area) book = get_export_workbook([provider], [service]) rsp = self.import_book(book) self.assertEqual(BAD_REQUEST, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertContains(rsp, "%d is not a provider this user may import" % provider.id, status_code=BAD_REQUEST) self.assertContains(rsp, "Non-staff users may not create services for other providers", status_code=BAD_REQUEST)
def test_staff_add_bad_provider(self): type = ProviderTypeFactory() self.user.is_staff = True self.user.save() provider = ProviderFactory.build(type=type, user=self.user, number_of_monthly_beneficiaries=-1) # Doesn't save self.assertFalse(provider.id) book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertContains(rsp, "Row 2: number_of_monthly_beneficiaries: Ensure this value is " "greater than or equal to 0.", status_code=BAD_REQUEST)
def test_provider_change_service(self): # A provider can change their existing service provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(provider=provider, type=type, area_of_service=area) service.name_en = 'Radiator Repair' service.name_fr = 'Le Marseilles' book = get_export_workbook([provider], [service]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_service = Service.objects.get(id=service.id) self.assertEqual(service.name_en, new_service.name_en) self.assertEqual(service.name_fr, new_service.name_fr)
def test_provider_change_own_data(self): # Non-staff can change their own provider provider = ProviderFactory(user=self.user) # Tweak some data provider.name_en = 'Jim-Bob' provider.name_ar = 'Ahmed-Bob' provider.name_fr = 'Pierre-Bob' book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_provider = Provider.objects.get(id=provider.id) self.assertEqual(provider.name_en, new_provider.name_en) self.assertEqual(provider.name_ar, new_provider.name_ar) self.assertEqual(provider.name_fr, new_provider.name_fr)
def test_staff_add_providers(self): # Remember, only one provider per user self.user.is_staff = True self.user.save() type1 = ProviderTypeFactory() provider1 = ProviderFactory.build(type=type1, user=self.user) # Doesn't save user2 = EmailUserFactory() type2 = ProviderTypeFactory() provider2 = ProviderFactory.build(type=type2, user=user2) # Doesn't save book = get_export_workbook([provider1, provider2]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertTrue(Provider.objects.filter(name_en=provider1.name_en).exists()) self.assertTrue(Provider.objects.filter(name_en=provider2.name_en).exists())
def test_provider_change_own_data(self): # Non-staff can change their own provider provider = ProviderFactory(user=self.user) name_fields = generate_translated_fields('name', False) # Tweak some data for field in name_fields: setattr(provider, field, random_string(10)) book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_provider = Provider.objects.get(id=provider.id) for field in name_fields: self.assertEqual(getattr(provider, field), getattr(new_provider, field))
def test_provider_add_bad_service(self): provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory.build(provider=provider, type=type, area_of_service=area, name_en=VERY_LONG_STRING, tuesday_open=time(6, 59), tuesday_close=time(21, 2)) self.assertIsNotNone(service.location) criterion = SelectionCriterionFactory.build( service=service ) book = get_export_workbook([provider], [service], [criterion]) rsp = self.import_book(book) self.assertEqual(BAD_REQUEST, rsp.status_code, msg=rsp.content.decode('utf-8'))
def test_staff_add_bad_provider(self): type = ProviderTypeFactory() self.user.is_staff = True self.user.save() provider = ProviderFactory.build( type=type, user=self.user, number_of_monthly_beneficiaries=-1) # Doesn't save self.assertFalse(provider.id) book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertContains( rsp, "Row 2: number_of_monthly_beneficiaries: Ensure this value is " "greater than or equal to 0.", status_code=BAD_REQUEST)
def test_provider_bad_criteria(self): provider = ProviderFactory(user=self.user) service = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT) criterion1 = SelectionCriterionFactory(service=service) criterion2 = SelectionCriterionFactory(service=service) # Change the 2nd one's text before exporting criterion2.text_en = criterion2.text_ar = criterion2.text_fr = '' book = get_export_workbook([provider], None, [criterion1, criterion2]) rsp = self.import_book(book) self.assertContains( rsp, "Selection criterion must have text in at least one language", status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_staff_change_provider_invalid_id(self): self.user.is_staff = True self.user.save() provider = ProviderFactory() # Tweak some data provider.name_en = 'Jim-Bob' provider.name_ar = 'Ahmed-Bob' provider.name_fr = 'Pierre-Bob' book = get_export_workbook([provider], cell_overwrite_ok=True) sheet = book.get_sheet(0) sheet.write(r=1, c=0, label='xyz') rsp = self.import_book(book) self.assertContains(rsp, "id: xyz is not a valid ID", status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_staff_change_provider(self): # Staff can change another user's provider self.user.is_staff = True self.user.save() provider = ProviderFactory() # Tweak some data provider.name_en = 'Jim-Bob' provider.name_ar = 'Ahmed-Bob' provider.name_fr = 'Pierre-Bob' book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_provider = Provider.objects.get(id=provider.id) self.assertEqual(provider.name_en, new_provider.name_en) self.assertEqual(provider.name_ar, new_provider.name_ar) self.assertEqual(provider.name_fr, new_provider.name_fr)
def test_provider_change_anothers_service(self): # A provider cannot change another provider's existing service provider = ProviderFactory() type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(provider=provider, type=type, area_of_service=area) service.name_en = 'Radiator Repair' service.name_fr = 'Le Marseilles' book = get_export_workbook([provider], [service]) rsp = self.import_book(book) # self.fail(rsp.content.decode('utf-8')) self.assertEqual(BAD_REQUEST, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertContains(rsp, "%d is not a provider this user may import" % provider.id, status_code=BAD_REQUEST) self.assertContains(rsp, "%d is not a service this user may import" % service.id, status_code=BAD_REQUEST)
def test_staff_change_services(self): # Staff can change anyone's service self.user.is_staff = True self.user.save() provider = ProviderFactory() type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(provider=provider, type=type, area_of_service=area) service.name_en = 'Radiator Repair' service.name_fr = 'Le Marseilles' book = get_export_workbook([provider], [service]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_service = Service.objects.get(id=service.id) self.assertEqual(service.name_en, new_service.name_en) self.assertEqual(service.name_fr, new_service.name_fr)
def test_provider_delete_service(self): # A provider can delete their existing service # by blanking out all the fields except id provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(provider=provider, type=type, area_of_service=area) self.assertTrue(Service.objects.filter(id=service.id).exists()) book = get_export_workbook([provider], [service], cell_overwrite_ok=True) # Now blank out everything about the service except its 'id' blank_out_row_for_testing(book, sheet_num=1, row_num=1) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertFalse(Service.objects.filter(id=service.id).exists())
def test_provider_delete_anothers_service(self): # A provider cannot delete someone else's service provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(type=type, area_of_service=area) self.assertTrue(Service.objects.filter(id=service.id).exists()) book = get_export_workbook([provider], [service], cell_overwrite_ok=True) # Now blank out everything about the service except its 'id' blank_out_row_for_testing(book, sheet_num=1, row_num=1) rsp = self.import_book(book) self.assertContains(rsp, "%d is not a service this user may delete" % service.id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_staff_change_provider(self): # Staff can change another user's provider self.user.is_staff = True self.user.save() provider = ProviderFactory() name_fields = generate_translated_fields('name', False) # Tweak some data for field in name_fields: setattr(provider, field, random_string(10)) book = get_export_workbook([provider]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) new_provider = Provider.objects.get(id=provider.id) for field in name_fields: self.assertEqual(getattr(provider, field), getattr(new_provider, field))
def test_staff_change_provider_invalid_id(self): self.user.is_staff = True self.user.save() provider = ProviderFactory() name_fields = generate_translated_fields('name', False) # Tweak some data for field in name_fields: setattr(provider, field, random_string(10)) book = get_export_workbook([provider], cell_overwrite_ok=True) sheet = book.get_sheet(0) sheet.write(r=1, c=0, label='xyz') rsp = self.import_book(book) self.assertContains(rsp, "id: xyz is not a valid ID", status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_bad_criteria(self): provider = ProviderFactory(user=self.user) service = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT) criterion1 = SelectionCriterionFactory(service=service) criterion2 = SelectionCriterionFactory(service=service) # Change the 2nd one's text before exporting for field in generate_translated_fields('text', False): setattr(criterion2, field, '') book = get_export_workbook([provider], None, [criterion1, criterion2]) rsp = self.import_book(book) self.assertContains( rsp, "Selection criterion must have text in at least one language", status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_staff_change_nonexistent_provider(self): # Staff can change another user's provider self.user.is_staff = True self.user.save() provider = ProviderFactory() name_fields = generate_translated_fields('name', False) # Tweak some data for field in name_fields: setattr(provider, field, random_string(10)) book = get_export_workbook([provider]) provider_id = provider.id provider.delete() rsp = self.import_book(book) self.assertContains(rsp, "There is no provider with id=%d" % provider_id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_staff_change_nonexistent_provider(self): # Staff can change another user's provider self.user.is_staff = True self.user.save() provider = ProviderFactory() # Tweak some data provider.name_en = 'Jim-Bob' provider.name_ar = 'Ahmed-Bob' provider.name_fr = 'Pierre-Bob' book = get_export_workbook([provider]) provider_id = provider.id provider.delete() rsp = self.import_book(book) self.assertContains(rsp, "There is no provider with id=%d" % provider_id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))
def test_provider_add_bad_service(self): provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory.build(provider=provider, type=type, area_of_service=area, name_en=VERY_LONG_STRING, tuesday_open=time(6, 59), tuesday_close=time(21, 2)) self.assertIsNotNone(service.location) criterion = SelectionCriterionFactory.build(service=service) book = get_export_workbook([provider], [service], [criterion]) rsp = self.import_book(book) self.assertEqual(BAD_REQUEST, rsp.status_code, msg=rsp.content.decode('utf-8'))
def test_staff_delete_service(self): # A staffer can delete someone else's service self.user.is_staff = True self.user.save() provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(type=type, area_of_service=area) self.assertTrue(Service.objects.filter(id=service.id).exists()) book = get_export_workbook([provider], [service], cell_overwrite_ok=True) # Now blank out everything about the service except its 'id' blank_out_row_for_testing(book, sheet_num=1, row_num=1) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertFalse(Service.objects.filter(id=service.id).exists())
def test_staff_add_providers(self): # Remember, only one provider per user self.user.is_staff = True self.user.save() type1 = ProviderTypeFactory() provider1 = ProviderFactory.build(type=type1, user=self.user) # Doesn't save user2 = EmailUserFactory() type2 = ProviderTypeFactory() provider2 = ProviderFactory.build(type=type2, user=user2) # Doesn't save book = get_export_workbook([provider1, provider2]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) self.assertTrue( Provider.objects.filter(name_en=provider1.name_en).exists()) self.assertTrue( Provider.objects.filter(name_en=provider2.name_en).exists())
def test_empty_export(self): book = save_and_read_book(get_export_workbook([])) self.assertEqual(3, book.nsheets) sheet = book.get_sheet(0) self.assertEqual(PROVIDER_SHEET_NAME, sheet.name) self.assertEqual(1, sheet.nrows) self.assertEqual(len(PROVIDER_HEADINGS), sheet.ncols) sheet = book.get_sheet(1) self.assertEqual(SERVICES_SHEET_NAME, sheet.name) self.assertEqual(1, sheet.nrows) self.assertEqual(len(SERVICE_HEADINGS), sheet.ncols) sheet = book.get_sheet(2) self.assertEqual(SELECTION_CRITERIA_SHEET_NAME, sheet.name) self.assertEqual(1, sheet.nrows) self.assertEqual(len(SELECTION_CRITERIA_HEADINGS), sheet.ncols)
def test_provider_add_criteria(self): provider = ProviderFactory(user=self.user) service = ServiceFactory(provider=provider, status=Service.STATUS_CURRENT) criterion1 = SelectionCriterionFactory(service=service) criterion2 = SelectionCriterionFactory.build(service=service, text_en="New Criterion!") book = get_export_workbook([provider], None, [criterion1, criterion2]) rsp = self.import_book(book) self.assertEqual(OK, rsp.status_code, msg=rsp.content.decode('utf-8')) # Existing one still there self.assertTrue(SelectionCriterion.objects.filter( service=service, text_en=criterion1.text_en, id=criterion1.id ).exists()) # New one added self.assertTrue(SelectionCriterion.objects.filter( service=service, text_en=criterion2.text_en ).exists())
def test_staff_delete_nonexistent_service(self): self.user.is_staff = True self.user.save() provider = ProviderFactory(user=self.user) type = ServiceTypeFactory() area = ServiceAreaFactory() service = ServiceFactory(type=type, area_of_service=area) self.assertTrue(Service.objects.filter(id=service.id).exists()) book = get_export_workbook([provider], [service], cell_overwrite_ok=True) service_id = service.id service.delete() # Now blank out everything about the service except its 'id' blank_out_row_for_testing(book, sheet_num=1, row_num=1) rsp = self.import_book(book) self.assertContains(rsp, "No service with id=%d" % service_id, status_code=BAD_REQUEST, msg_prefix=rsp.content.decode('utf-8'))