DaftAcademy / daftacademy-python_levelup-spring2021

19 stars 10 forks source link

4.1 AssertionError #24

Closed koliber31 closed 3 years ago

koliber31 commented 3 years ago

Cześć, podczas testów wyskakuje mi następujący błąd: AssertionError: {'cus[3990 chars]ss': '8 Johnstown Road None Cork Ireland'}, {'[5965 chars]d'}]} != {'cus[3990 chars]ss': None}, {'id': 'ISLAT', 'name': 'Island Tr[5899 chars]d'}]} Niby domyślam się, że powinienem usunąć wszystkie Nony z "full_address", ale tutaj to wygląda tak jakby przyrównywane były do siebie dwa rekordy z tej bazy danych. Dodatkowo czy ktoś mógłby dać mi wskazówkę jak mogę usunąć ten Nony :).

korowiov commented 3 years ago

Mea culpa. Nie zauważyłem, że rekord o id "HUNGO" ma pusty postal code przez co w teście przez zastosowanie samej funkcji CONCAT, wartość dla full_address był nulem. Poprawiłem teraz test, że można użyć albo samego CONCAT albo CONCAT z COALESCE (null zastąpić pustym stringiem). Jak będą dwie spacje i więcej, to trudno, ignorujemy to ;)

koliber31 commented 3 years ago

Poprzedni błąd faktycznie zniknął, natomiast pojawił się kolejny File "/usercode/coding_rooms_unit_tests.py", line 945, in test_response self.assertTrue(result) AssertionError: False is not true a na tym etapie jestem już niemal pewny że wyniki wyglądają tak jak w przykładzie np. dla "HUNGO": { "id": "HUNGO", "name": "Hungry Owl All-Night Grocers", "full_address": "8 Johnstown Road Cork Ireland" }, I może jeszcze poprosiłbym żeby na codingrooms dodać przykład jak ma wyglądać /customers, ponieważ jest on tylko na githubie i może oszczędzi to innym zastanawiania się czym jest full_address. Jeszce jedno pytanie napisałeś o funkcji CONCAT, ale takiej funkcji nie ma w sqlite, czy ja używam czegoś innego?

korowiov commented 3 years ago

Stricte nie ma, ale można użyć alternatywnego rozwiązania ;) https://www.sqlitetutorial.net/sqlite-string-functions/sqlite-concat/. Poza tym jeszcze sortowanie jest do poprawy ;)

mateusz91t commented 3 years ago

SELECT 'ABC' || '123' zwróci ABC123 ale można też wysłać do swojego połączenia skomponowaną przez Ciebie funkcję: https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.create_function

korowiov commented 3 years ago

A czy ktoś broni zrobić coś takiego? ;) 'ABC' || ' ' || '123', zwróci ABC 123

Mikey56 commented 3 years ago

Został mi tylko błąd "File "/usercode/coding_rooms_unit_tests.py", line 945, in test_response self.assertTrue(result) AssertionError: False is not true". A poprawiłem ten przypadek z HUNGO. Można dostać jakąś podpowiedź na co jeszcze zwrócić uwagę?

korowiov commented 3 years ago

Został mi tylko błąd "File "/usercode/coding_rooms_unit_tests.py", line 945, in test_response self.assertTrue(result) AssertionError: False is not true". A poprawiłem ten przypadek z HUNGO. Można dostać jakąś podpowiedź na co jeszcze zwrócić uwagę?

Podmiankę dwóch spacji na jedną pomiń. Tak jak napisałem wcześniej: Jak będą dwie spacje i więcej, to trudno, ignorujemy to ;)

mateusz91t commented 3 years ago

Został mi tylko błąd "File "/usercode/coding_rooms_unit_tests.py", line 945, in test_response self.assertTrue(result) AssertionError: False is not true". A poprawiłem ten przypadek z HUNGO. Można dostać jakąś podpowiedź na co jeszcze zwrócić uwagę?

help, ja też już nie wiem co nie tak:

Myślałem, że może te CustomersId {'VALON', 'Val2'}, bo wogle nie mają adresu, więc wychodzą 3 spacje. Obsłużyłem to case when/then tak, żeby zwracało NULL jeśli cały fulladress to null, a jeśli coś wypełnione to ta wartość, ale ten sam błąd. Sortowanie domyślne ASC ma być? Może Wasze testy mają jakąś inną wersję bazy nothwind [korzystam z tej od Was]? Czasem commitowaliście także zmiany w bazie danych: 6d67bdccad1e8aa4c24060b71c11fd25fa05ecd6: BIN +548 KB 4_T_jak_Tabela/sample_app/northwind.db Może coś banalnego nie widzę :D już sam nie wiem ;p

korowiov commented 3 years ago

Został mi tylko błąd "File "/usercode/coding_rooms_unit_tests.py", line 945, in test_response self.assertTrue(result) AssertionError: False is not true". A poprawiłem ten przypadek z HUNGO. Można dostać jakąś podpowiedź na co jeszcze zwrócić uwagę?

help, ja też już nie wiem co nie tak:

  • sortowanie jest,
  • concat z coalesce jest
  • status_code==200
  • dict z listą dictów zwracany jak w przykładzie

Myślałem, że może te CustomersId {'VALON', 'Val2'}, bo wogle nie mają adresu, więc wychodzą 3 spacje. Obsłużyłem to case when/then tak, żeby zwracało NULL jeśli cały fulladress to null, a jeśli coś wypełnione to ta wartość, ale ten sam błąd. Sortowanie domyślne ASC ma być? Może Wasze testy mają jakąś inną wersję bazy nothwind [korzystam z tej od Was]? Czasem commitowaliście także zmiany w bazie danych: 6d67bdc: BIN +548 KB 4_T_jak_Tabela/sample_app/northwind.db Może coś banalnego nie widzę :D już sam nie wiem ;p

W tych, nazwijmy to kontrowersyjnych "customerach" (HUNGO, VALON, Val2), wartości dla full_address są poprawne ;) a czy przeglądał Pan czy wyniki napewno są w dobrej kolejności? Bo mam wątpliwości czy Pan przeglądał ;)

     {
      "id": "VALON",
      "name": "IT",
      "full_address": null
    },
    {
      "id": "VICTE",
      "name": "Victuailles en stock",
      "full_address": "2, rue du Commerce 69004 Lyon France"
    },
    {
      "id": "VINET",
      "name": "Vins et alcools Chevalier",
      "full_address": "59 rue de l'Abbaye 51100 Reims France"
    },
    {
      "id": "Val2",
      "name": "IT",
      "full_address": null
    },

Coś tu nie gra ;)

ps. proszę przejrzeć wyniki najpierw bez order by CustomerID ;)

mateusz91t commented 3 years ago

Sugestia to case insensitive? Zmieniłem ORDER BY CustomerID na ORDER BY UPPER(CustomerID). Teraz mam następująco, ale ten sam test również nie przechodzi:

... {
      "id": "VAFFE",
      "name": "Vaffeljernet",
      "full_address": "Smagsloget 45 8200 rhus Denmark"
    },
    {
      "id": "Val2",
      "name": "IT",
      "full_address": ""
    },
    {
      "id": "VALON",
      "name": "IT",
      "full_address": ""
    },
    {
      "id": "VICTE",
      "name": "Victuailles en stock",
      "full_address": "2, rue du Commerce 69004 Lyon France"
    }, ...
korowiov commented 3 years ago

Proszę tego Pana case'a zamienić po prostu na np.: (COALESCE(Address, '') || ' ' || COALESCE(PostalCode, '') || ' ' || COALESCE(City, '') || ' ' || COALESCE(Country, '')) oraz usunąć te rtrim ;) Jak już wcześniej pisałem, jak są dodatkowe spacje to je ignorujemy, niech sobie będą ;) Z mojego doświadczenia wynika, że próba przewidzenia każdego przypadku błędów w danych (niepotrzebne spacje, dziwne znaki) kończy się porażką i jest jak walka z wiatrakami. Ostatecznie dane są poprawiane w bazie, dlatego w treści zadania nie pisałem o próbie "czyszczeniu" danych ;)

mateusz91t commented 3 years ago

@korowiov Dziękuję za pomoc!