예제 #1
0
    def test_should_return_empty_message_on_invalid_code(self):
        self.maxDiff = None
        response = get_result_from_code("ABC")
        expected_response = (
            {
                "altText":
                ("Pola rozpoznaje tylko kody kreskowe typu EAN8 i EAN13. "
                 "Zeskanowany przez Ciebie kod jest innego typu. Spróbuj "
                 "zeskanować kod z czegoś innego"),
                "card_type":
                "type_white",
                "code":
                "ABC",
                "name":
                "Nieprawidłowy kod",
                "plCapital":
                None,
                "plCapital_notes":
                None,
                "plNotGlobEnt":
                None,
                "plNotGlobEnt_notes":
                None,
                "plRegistered":
                None,
                "plRegistered_notes":
                None,
                "plRnD":
                None,
                "plRnD_notes":
                None,
                "plScore":
                None,
                "plWorkers":
                None,
                "plWorkers_notes":
                None,
                "product_id":
                None,
                "report_button_text":
                "Zgłoś",
                "report_button_type":
                "type_white",
                "report_text":
                "Zgłoś jeśli posiadasz bardziej aktualne dane na temat tego "
                "produktu",
            },
            {
                "was_590": False,
                "was_plScore": False,
                "was_verified": False
            },
            None,
        )
        self.assertEqual(expected_response, response)

        response = get_result_from_code("123123")
        expected_response[0]["code"] = "123123"
        self.assertEqual(expected_response, response)
예제 #2
0
    def test_internal_code(self):
        prefix = "000"
        current_ean = prefix + TEST_EAN13[3:]
        product = Product(code=current_ean)

        with mock.patch("pola.logic.get_by_code", return_value=product):
            response = get_result_from_code(current_ean)

        expected_response = (
            {
                "altText":
                ('Zeskanowany kod jest wewnętrznym kodem sieci handlowej. Pola nie '
                 'potrafi powiedzieć o nim nic więcej'),
                "card_type":
                "type_white",
                "code":
                current_ean,
                "name":
                'Kod wewnętrzny',
                "plCapital":
                None,
                "plCapital_notes":
                None,
                "plNotGlobEnt":
                None,
                "plNotGlobEnt_notes":
                None,
                "plRegistered":
                None,
                "plRegistered_notes":
                None,
                "plRnD":
                None,
                "plRnD_notes":
                None,
                "plScore":
                None,
                "plWorkers":
                None,
                "plWorkers_notes":
                None,
                "product_id":
                None,
                "report_button_text":
                "Zgłoś",
                "report_button_type":
                "type_white",
                "report_text":
                'Zgłoś jeśli posiadasz bardziej aktualne dane na temat tego produktu',
            },
            {
                "was_590": False,
                "was_plScore": False,
                "was_verified": False
            },
            product,
        )
        self.maxDiff = None
        self.assertEqual(expected_response[0], response[0])
        self.assertEqual(expected_response, response)
예제 #3
0
def get_by_code_internal(request, ai_supported=False):
    code = request.GET['code']
    device_id = request.GET['device_id']

    result, stats, product = logic.get_result_from_code(code)

    if product is not None:
        Query.objects.create(
            client=device_id,
            product=product,
            was_verified=stats['was_verified'],
            was_590=stats['was_590'],
            was_plScore=stats['was_plScore'],
        )

    if product:
        product.increment_query_count()
        if product.company:
            product.company.increment_query_count()

    if ai_supported:
        result = logic_ai.add_ask_for_pics(product, result)

    result["donate"] = {
        "show_button": True,
        "url": "https://klubjagiellonski.pl/zbiorka/wspieraj-aplikacje-pola/",
        "title": "Wspieraj aplikację Pola",
    }
    return result
예제 #4
0
    def test_missing_company_and_wrong_country(self, prefix, country):
        current_ean = prefix + TEST_EAN13[3:]
        product = Product(code=current_ean)

        with mock.patch("pola.logic.get_by_code", return_value=product):
            response = get_result_from_code(current_ean)

        expected_response = (
            {
                "altText":
                ('Ten produkt został wyprodukowany przez zagraniczną firmę, której '
                 'miejscem rejestracji jest: {}.'.format(country)),
                "card_type":
                "type_grey",
                "code":
                current_ean,
                "name":
                'Miejsce rejestracji: {}'.format(country),
                "plCapital":
                None,
                "plCapital_notes":
                None,
                "plNotGlobEnt":
                None,
                "plNotGlobEnt_notes":
                None,
                "plRegistered":
                None,
                "plRegistered_notes":
                None,
                "plRnD":
                None,
                "plRnD_notes":
                None,
                "plScore":
                0,
                "plWorkers":
                None,
                "plWorkers_notes":
                None,
                "product_id":
                None,
                "report_button_text":
                "Zgłoś",
                "report_button_type":
                "type_white",
                "report_text":
                'Zgłoś jeśli posiadasz bardziej aktualne dane na temat tego produktu',
            },
            {
                "was_590": False,
                "was_plScore": False,
                "was_verified": False
            },
            product,
        )
        self.maxDiff = None
        self.assertEqual(expected_response[0], response[0])
        self.assertEqual(expected_response, response)
예제 #5
0
    def test_missing_company_and_book(self, prefix):
        current_ean = prefix + TEST_EAN13[3:]
        product = Product(code=current_ean)

        with mock.patch("pola.logic.get_by_code", return_value=product):
            response = get_result_from_code(current_ean)

        expected_response = (
            {
                "altText":
                ('Zeskanowany kod jest kodem ISBN/ISSN/ISMN dotyczącym książki,  '
                 'czasopisma lub albumu muzycznego. Wydawnictwa tego typu nie są '
                 'aktualnie w obszarze zainteresowań Poli.'),
                "card_type":
                "type_white",
                "code":
                current_ean,
                "name":
                "Kod ISBN/ISSN/ISMN",
                "plCapital":
                None,
                "plCapital_notes":
                None,
                "plNotGlobEnt":
                None,
                "plNotGlobEnt_notes":
                None,
                "plRegistered":
                None,
                "plRegistered_notes":
                None,
                "plRnD":
                None,
                "plRnD_notes":
                None,
                "plScore":
                None,
                "plWorkers":
                None,
                "plWorkers_notes":
                None,
                "product_id":
                None,
                "report_button_text":
                "Zgłoś",
                "report_button_type":
                "type_white",
                "report_text":
                'To nie jest książka, czasopismo lub album muzyczny? Prosimy o zgłoszenie',
            },
            {
                "was_590": False,
                "was_plScore": False,
                "was_verified": False
            },
            product,
        )
        self.assertEqual(expected_response, response)
예제 #6
0
    def test_missing_company_and_590(self, mock_get_by_code):
        product = Product(code=TEST_EAN13)
        mock_get_by_code.return_value = product
        response = get_result_from_code(TEST_EAN13)

        expected_response = (
            {
                "altText":
                ("Zeskanowałeś kod, którego nie mamy jeszcze w bazie. Bardzo "
                 "prosimy o zgłoszenie tego kodu i wysłania zdjęć zarówno kodu "
                 "kreskowego jak i etykiety z produktu. Z góry dziękujemy!"),
                "card_type":
                "type_grey",
                "code":
                "5900084231145",
                "name":
                "Zgłoś nam ten kod!",
                "plCapital":
                None,
                "plCapital_notes":
                None,
                "plNotGlobEnt":
                None,
                "plNotGlobEnt_notes":
                None,
                "plRegistered":
                None,
                "plRegistered_notes":
                None,
                "plRnD":
                None,
                "plRnD_notes":
                None,
                "plScore":
                None,
                "plWorkers":
                None,
                "plWorkers_notes":
                None,
                "product_id":
                None,
                "report_button_text":
                "Zgłoś",
                "report_button_type":
                "type_red",
                "report_text":
                "Bardzo prosimy o zgłoszenie nam tego produktu",
            },
            {
                "was_590": True,
                "was_plScore": False,
                "was_verified": False
            },
            product,
        )
        self.assertEqual(expected_response, response)
예제 #7
0
def get_by_code_v2(request):
    code = request.GET['code']
    device_id = request.GET['device_id']

    result, stats, product = logic.get_result_from_code(code)

    if product is not None:
        Query.objects.create(client=device_id, product=product,
                             was_verified=stats['was_verified'],
                             was_590=stats['was_590'],
                             was_plScore=stats['was_plScore'])

    if product:
        product.increment_query_count()
        if product.company:
            product.company.increment_query_count()

    return JsonResponse(result)
예제 #8
0
    def test_code_with_multiple_company(self):
        current_ean = TEST_EAN13
        company1 = CompanyFactory.create(name='test-company1', description='test-description')
        company2 = CompanyFactory.create(name='test-company2', description='test-description')

        product = ProductFactory.create(code=current_ean, company=company1, brand__company=company2)

        with mock.patch("pola.logic.get_by_code", return_value=product):
            response = get_result_from_code(current_ean)
        # TODO: Add support for multiple companies in this response
        expected_response = (
            {
                'altText': None,
                'card_type': 'type_grey',
                'code': '5900084231145',
                'description': 'test-description',
                'is_friend': False,
                'name': company1.official_name,
                'plCapital': None,
                'plCapital_notes': None,
                'plNotGlobEnt': None,
                'plNotGlobEnt_notes': None,
                'plRegistered': None,
                'plRegistered_notes': None,
                'plRnD': None,
                'plRnD_notes': None,
                'plScore': None,
                'plWorkers': None,
                'plWorkers_notes': None,
                'product_id': product.id,
                'report_button_text': 'Zgłoś',
                'report_button_type': 'type_white',
                'report_text': ('Zgłoś jeśli posiadasz bardziej aktualne dane na temat tego produktu'),
                'sources': {},
            },
            {"was_590": True, "was_plScore": False, "was_verified": False},
            product,
        )
        self.maxDiff = None
        self.assertEqual(expected_response[0], response[0])
        self.assertEqual(expected_response, response)
예제 #9
0
def get_by_code_internal(request, ai_supported=False):
    code = request.GET['code']
    device_id = request.GET['device_id']

    result, stats, product = logic.get_result_from_code(code)

    if product is not None:
        Query.objects.create(client=device_id,
                             product=product,
                             was_verified=stats['was_verified'],
                             was_590=stats['was_590'],
                             was_plScore=stats['was_plScore'])

    if product:
        product.increment_query_count()
        if product.company:
            product.company.increment_query_count()

    if ai_supported:
        result = logic_ai.add_ask_for_pics(product, result)

    return result
예제 #10
0
    def test_missing_company_and_590(self, mock_get_by_code):
        product = ProductFactory.create(code=TEST_EAN13, company=None, brand=None)
        mock_get_by_code.return_value = product
        response = get_result_from_code(TEST_EAN13)

        expected_response = (
            {
                "altText": (
                    "Każde skanowanie jest rejestrowane. Najczęściej skanowane firmy i produkty, "
                    "których nie mamy jeszcze w bazie, są weryfikowane w pierwszej kolejności. "
                    "Nie pobieramy przy tym żadnych informacji o użytkowniku.\n"
                    "\n"
                    "Jeśli chcesz zgłosić błąd lub wyrazić opinię, prosimy o kontakt: [email protected]"
                ),
                "card_type": "type_grey",
                "code": "5900084231145",
                "name": "Dziękujemy za użycie aplikacji Pola!",
                "plCapital": None,
                "plCapital_notes": None,
                "plNotGlobEnt": None,
                "plNotGlobEnt_notes": None,
                "plRegistered": None,
                "plRegistered_notes": None,
                "plRnD": None,
                "plRnD_notes": None,
                "plScore": None,
                "plWorkers": None,
                "plWorkers_notes": None,
                "product_id": product.id,
                "report_button_text": "Zgłoś",
                "report_button_type": "type_red",
                "report_text": "Bardzo prosimy o zgłoszenie nam tego produktu",
            },
            {"was_590": True, "was_plScore": False, "was_verified": False},
            product,
        )
        self.assertEqual(expected_response, response)