Example #1
0
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']
Example #4
0
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
Example #5
0
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
Example #6
0
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())
Example #10
0
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
Example #11
0
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
Example #12
0
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
Example #13
0
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
Example #14
0
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