def test_company_serializer_unknown_date_of_cessation(): serializer = serializers.CompanySerializer( data={'date_of_cessation': 'Unknown'}) serializer.is_valid() assert 'date_of_cessation' not in serializer.errors
def test_company_serializer_doesnt_accept_number_under_8_chars(): data = {'number': "1234567"} serializer = serializers.CompanySerializer(data=data) valid = serializer.is_valid() assert valid is False assert 'number' in serializer.errors error_msg = 'Company number must be 8 characters' assert error_msg in serializer.errors['number']
def test_company_serializer_nested_case_study(company, company_case_study_one, company_case_study_two): case_studies = [ serializers.CompanyCaseStudySerializer(company_case_study_one).data, serializers.CompanyCaseStudySerializer(company_case_study_two).data, ] serializer = serializers.CompanySerializer(company) assert len(serializer.data['supplier_case_studies']) == len(case_studies) assert case_studies[0] in serializer.data['supplier_case_studies'] assert case_studies[1] in serializer.data['supplier_case_studies']
def test_company_serializer_save(): serializer = serializers.CompanySerializer(data=VALID_REQUEST_DATA) serializer.is_valid() company = serializer.save() assert company.name == VALID_REQUEST_DATA['name'] assert company.number == VALID_REQUEST_DATA['number'] assert company.website == VALID_REQUEST_DATA['website'] assert company.description == VALID_REQUEST_DATA['description'] assert len(company.verification_code) == 12
def test_company_serializer_is_published_field_with_isd(): data = { 'number': "01234567", 'name': 'Earnest Corp', 'date_of_creation': '2010-10-10', 'firstname': 'test_firstname', 'is_published_investment_support_directory': True, } serializer = serializers.CompanySerializer(data=data) assert serializer.is_valid(), serializer.errors instance = serializer.save() assert instance.is_published is True
def test_extract_expertise_parser(): company = factories.CompanyFactory( expertise_languages=['ab', 'aa', 'it', 'made-up'], expertise_industries=['ADVANCED_MANUFACTURING', 'AIRPORTS'], expertise_regions=['NORTH_EAST', 'SOUTH_EAST'], expertise_countries=['PT', 'RU'], pk=1, ) company_data_dict = serializers.CompanySerializer(company).data expected_values = [ 'Advanced manufacturing', 'Airports', 'North East', 'South East', 'Portugal', 'Russia', 'Abkhazian', 'Afar', 'Italian' ] company_parser = CompanyParser(company_data_dict) expertise_search_labels = company_parser.expertise_labels_for_search assert expertise_search_labels == expected_values
def test_company_serializer_untouches_is_published(): data = { 'number': "01234567", 'export_status': choices.EXPORT_STATUSES[1][0], 'name': 'Earnest Corp', 'date_of_creation': '2010-10-10', 'title': 'test_title', 'firstname': 'test_firstname', 'lastname': 'test_lastname', 'address_line_1': 'test_address_line_1', 'address_line_2': 'test_address_line_2', 'locality': 'test_locality', 'postal_code': 'test_postal_code', 'country': 'test_country', } serializer = serializers.CompanySerializer(data=data) assert serializer.is_valid(), serializer.errors instance = serializer.save() assert instance.is_published is False
def test_company_serializer_doesnt_accept_number_over_8_chars(): data = { 'number': "012345678", 'export_status': choices.EXPORT_STATUSES[1][0], 'name': 'Earnest Corp', 'date_of_creation': '2010-10-10', 'title': 'test_title', 'firstname': 'test_firstname', 'lastname': 'test_lastname', 'address_line_1': 'test_address_line_1', 'address_line_2': 'test_address_line_2', 'locality': 'test_locality', 'postal_code': 'test_postal_code', 'country': 'test_country', } serializer = serializers.CompanySerializer(data=data) valid = serializer.is_valid() assert valid is False assert 'number' in serializer.errors error_msg = 'Ensure this field has no more than 8 characters.' assert error_msg in serializer.errors['number']
def test_company_serializer_doesnt_allow_changing_modified_timestamp(): data = { 'number': "01234567", 'export_status': choices.EXPORT_STATUSES[1][0], 'name': 'Earnest Corp', 'date_of_creation': '2010-10-10', 'title': 'test_title', 'firstname': 'test_firstname', 'lastname': 'test_lastname', 'address_line_1': 'test_address_line_1', 'address_line_2': 'test_address_line_2', 'locality': 'test_locality', 'postal_code': 'test_postal_code', 'country': 'test_country', 'modified': datetime(2013, 3, 4, 15, 3, 1, 987654), } serializer = serializers.CompanySerializer(data=data) assert serializer.is_valid() is True company = serializer.save() # modified is the value of when the serializer save method was called # instead of what we tried to update it to assert company.modified == datetime(2016, 1, 9, 12, 16, 11, tzinfo=UTC())
def test_company_serializer_sole_trader(): data = { 'number': "01234567", 'has_exported_before': True, 'name': 'Earnest Corp', 'date_of_creation': '2010-10-10', 'title': 'test_title', 'firstname': 'test_firstname', 'lastname': 'test_lastname', 'address_line_1': 'test_address_line_1', 'address_line_2': 'test_address_line_2', 'locality': 'test_locality', 'postal_code': 'test_postal_code', 'country': 'test_country', 'company_type': company_types.SOLE_TRADER, } serializer = serializers.CompanySerializer(data=data) assert serializer.is_valid(), serializer.errors instance = serializer.save() assert instance.company_type == company_types.SOLE_TRADER assert instance.number.startswith('ST') assert len(instance.number) == 8
def test_company_serializer_has_keywords_shared_serializers(): serializer = serializers.CompanySerializer() validators = serializer.fields['keywords'].validators assert shared_validators.keywords_special_characters in validators assert shared_validators.keywords_word_limit in validators
def test_company_serializer_null_date_of_creation(): serializer = serializers.CompanySerializer(data={'date_of_creation': None}) serializer.is_valid() assert 'date_of_creation' not in serializer.errors
def test_company_doc_type(): company = factories.CompanyFactory(date_of_creation=datetime.date( 2000, 10, 10), sectors=['AEROSPACE', 'AIRPORTS']) case_study = factories.CompanyCaseStudyFactory(company=company) logo_mock = PropertyMock(return_value=Mock(url='/media/thing.jpg')) with patch.object(company, 'logo', new_callable=logo_mock): doc = documents.company_model_to_document(company) company_data_dict = serializers.CompanySerializer(company).data company_parser = helpers.CompanyParser(company_data_dict) expected_expertise_products_services = [] for key, values in company.expertise_products_services.items(): expected_expertise_products_services += values expected = { 'date_of_creation': date_to_fakedate(company.date_of_creation), 'description': company.description, 'employees': company.employees, 'facebook_url': company.facebook_url, 'pk': str(company.pk), 'keywords': company.keywords, 'linkedin_url': company.linkedin_url, 'logo': 'http://0.0.0.0:8000/media/thing.jpg', 'modified': datetime_to_fakedatetime(company.modified), 'name': company.name, 'number': company.number, 'has_description': True, 'sectors': company.sectors, 'expertise_industries': company.expertise_industries, 'expertise_regions': company.expertise_regions, 'expertise_languages': company.expertise_languages, 'expertise_countries': company.expertise_countries, 'expertise_products_services': company.expertise_products_services, 'expertise_products_services_labels': (expected_expertise_products_services), 'sectors_label': ['Aerospace', 'Airports'], 'expertise_labels': company_parser.expertise_labels_for_search, 'slug': company.slug, 'summary': company.summary, 'case_study_count': 1, 'has_single_sector': False, 'is_showcase_company': False, 'is_published_find_a_supplier': False, 'is_published_investment_support_directory': False, 'company_type': 'COMPANIES_HOUSE', 'supplier_case_studies': [{ 'description': case_study.description, 'image_one_caption': case_study.image_one_caption, 'image_three_caption': case_study.image_three_caption, 'image_two_caption': case_study.image_two_caption, 'keywords': case_study.keywords, 'pk': case_study.pk, 'sector': case_study.sector, 'short_summary': case_study.short_summary, 'slug': case_study.slug, 'testimonial': case_study.testimonial, 'testimonial_company': case_study.testimonial_company, 'testimonial_job_title': case_study.testimonial_job_title, 'testimonial_name': case_study.testimonial_name, 'title': case_study.title, 'website': case_study.website, }], 'twitter_url': company.twitter_url, 'website': company.website, } assert doc.to_dict() == expected assert doc.meta.id == company.pk
def company_model_to_document( company, index=settings.ELASTICSEARCH_COMPANY_INDEX_ALIAS ): # getattr is used on the company to allow this functionton be used in # migrations (historic models wont have all the fields listed below). company_fields = { 'date_of_creation', 'description', 'company_type', 'employees', 'facebook_url', 'keywords', 'linkedin_url', 'modified', 'name', 'number', 'sectors', 'expertise_industries', 'expertise_regions', 'expertise_languages', 'expertise_countries', 'expertise_products_services', 'slug', 'summary', 'twitter_url', 'website', 'is_showcase_company', 'is_published_investment_support_directory', 'is_published_find_a_supplier', } case_study_fields = { 'description', 'image_one_caption', 'image_three_caption', 'image_two_caption', 'keywords', 'pk', 'sector', 'short_summary', 'slug', 'testimonial', 'testimonial_company', 'testimonial_job_title', 'testimonial_name', 'title', 'website', } has_description = getattr(company, 'description', '') != '' company_data_dict = serializers.CompanySerializer(company).data company_parser = helpers.CompanyParser(company_data_dict) expertise_products_services_labels = [] for key, values in company.expertise_products_services.items(): expertise_products_services_labels += values company_doc_type = CompanyDocument( meta={'id': company.pk, '_index': index}, pk=str(company.pk), case_study_count=company.supplier_case_studies.count(), has_single_sector=len(company.sectors) == 1, has_description=has_description, logo=get_absolute_url(company.logo.url if company.logo else ''), sectors_label=[ helpers.get_sector_label(v) for v in company.sectors ], expertise_products_services_labels=expertise_products_services_labels, expertise_labels=company_parser.expertise_labels_for_search, **{key: getattr(company, key, '') for key in company_fields}, ) for case_study in company.supplier_case_studies.all(): company_doc_type.supplier_case_studies.append({ key: getattr(case_study, key, '') for key in case_study_fields }) return company_doc_type