def test_create_row(api_client, data_fixture): user, jwt_token = data_fixture.create_user_and_token() table = data_fixture.create_database_table(user=user) table_2 = data_fixture.create_database_table() text_field = data_fixture.create_text_field(table=table, order=0, name="Color", text_default="white") number_field = data_fixture.create_number_field(table=table, order=1, name="Horsepower") boolean_field = data_fixture.create_boolean_field(table=table, order=2, name="For sale") text_field_2 = data_fixture.create_text_field(table=table, order=3, name="Description") token = TokenHandler().create_token(user, table.database.group, "Good") wrong_token = TokenHandler().create_token(user, table.database.group, "Wrong") TokenHandler().update_token_permissions(user, wrong_token, False, True, True, True) response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": 99999}), {f"field_{text_field.id}": "Test 1"}, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) assert response.status_code == HTTP_404_NOT_FOUND assert response.json()["error"] == "ERROR_TABLE_DOES_NOT_EXIST" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), {f"field_{text_field.id}": "Test 1"}, format="json", HTTP_AUTHORIZATION="Token abc123", ) assert response.status_code == HTTP_401_UNAUTHORIZED assert response.json()["error"] == "ERROR_TOKEN_DOES_NOT_EXIST" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), {f"field_{text_field.id}": "Test 1"}, format="json", HTTP_AUTHORIZATION=f"Token {wrong_token.key}", ) assert response.status_code == HTTP_401_UNAUTHORIZED assert response.json()["error"] == "ERROR_NO_PERMISSION_TO_TABLE" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table_2.id}), {f"field_{text_field.id}": "Green"}, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) assert response.status_code == HTTP_400_BAD_REQUEST assert response.json()["error"] == "ERROR_USER_NOT_IN_GROUP" url = reverse("api:database:rows:list", kwargs={"table_id": table.id}) response = api_client.post( f"{url}?before=99999", {f"field_{text_field.id}": "Green"}, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) assert response.status_code == HTTP_404_NOT_FOUND assert response.json()["error"] == "ERROR_ROW_DOES_NOT_EXIST" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), { f"field_{text_field.id}": "Green", f"field_{number_field.id}": -10, f"field_{boolean_field.id}": None, f"field_{text_field_2.id}": None, }, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) response_json = response.json() assert response.status_code == HTTP_400_BAD_REQUEST assert response_json["error"] == "ERROR_REQUEST_BODY_VALIDATION" assert len(response_json["detail"]) == 2 assert response_json["detail"][f"field_{number_field.id}"][0][ "code"] == "min_value" assert response_json["detail"][f"field_{boolean_field.id}"][0][ "code"] == "null" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), {}, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) response_json_row_1 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_1[f"field_{text_field.id}"] == "white" assert not response_json_row_1[f"field_{number_field.id}"] assert response_json_row_1[f"field_{boolean_field.id}"] is False assert response_json_row_1[f"field_{text_field_2.id}"] is None assert response_json_row_1["order"] == "1.00000000000000000000" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), { f"field_{number_field.id}": None, f"field_{boolean_field.id}": False, f"field_{text_field_2.id}": "", }, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) response_json_row_2 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_2[f"field_{text_field.id}"] == "white" assert not response_json_row_2[f"field_{number_field.id}"] assert response_json_row_2[f"field_{boolean_field.id}"] is False assert response_json_row_2[f"field_{text_field_2.id}"] == "" assert response_json_row_2["order"] == "2.00000000000000000000" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), { f"field_{text_field.id}": "Green", f"field_{number_field.id}": 120, f"field_{boolean_field.id}": True, f"field_{text_field_2.id}": "Not important", }, format="json", HTTP_AUTHORIZATION=f"JWT {jwt_token}", ) response_json_row_3 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_3[f"field_{text_field.id}"] == "Green" assert response_json_row_3[f"field_{number_field.id}"] == "120" assert response_json_row_3[f"field_{boolean_field.id}"] assert response_json_row_3[f"field_{text_field_2.id}"] == "Not important" assert response_json_row_3["order"] == "3.00000000000000000000" response = api_client.post( reverse("api:database:rows:list", kwargs={"table_id": table.id}), { f"field_{text_field.id}": "Purple", f"field_{number_field.id}": 240, f"field_{boolean_field.id}": True, f"field_{text_field_2.id}": "", }, format="json", HTTP_AUTHORIZATION=f"Token {token.key}", ) response_json_row_4 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_4[f"field_{text_field.id}"] == "Purple" assert response_json_row_4[f"field_{number_field.id}"] == "240" assert response_json_row_4[f"field_{boolean_field.id}"] assert response_json_row_4[f"field_{text_field_2.id}"] == "" assert response_json_row_4["order"] == "4.00000000000000000000" token.refresh_from_db() assert token.handled_calls == 1 url = reverse("api:database:rows:list", kwargs={"table_id": table.id}) response = api_client.post( f"{url}?before={response_json_row_3['id']}", { f"field_{text_field.id}": "Red", f"field_{number_field.id}": 480, f"field_{boolean_field.id}": False, f"field_{text_field_2.id}": "", }, format="json", HTTP_AUTHORIZATION=f"Token {token.key}", ) response_json_row_5 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_5[f"field_{text_field.id}"] == "Red" assert response_json_row_5[f"field_{number_field.id}"] == "480" assert not response_json_row_5[f"field_{boolean_field.id}"] assert response_json_row_5[f"field_{text_field_2.id}"] == "" assert response_json_row_5["order"] == "2.99999999999999999999" token.refresh_from_db() assert token.handled_calls == 2 model = table.get_model() assert model.objects.all().count() == 5 rows = model.objects.all() row_1 = rows[0] assert row_1.id == response_json_row_1["id"] assert getattr(row_1, f"field_{text_field.id}") == "white" assert getattr(row_1, f"field_{number_field.id}") is None assert getattr(row_1, f"field_{boolean_field.id}") is False assert getattr(row_1, f"field_{text_field_2.id}") is None row_2 = rows[1] assert row_2.id == response_json_row_2["id"] assert getattr(row_2, f"field_{text_field.id}") == "white" assert getattr(row_2, f"field_{number_field.id}") is None assert getattr(row_2, f"field_{boolean_field.id}") is False assert getattr(row_2, f"field_{text_field_2.id}") == "" row_5 = rows[2] assert row_5.id == response_json_row_5["id"] assert getattr(row_5, f"field_{text_field.id}") == "Red" assert getattr(row_5, f"field_{number_field.id}") == 480 assert getattr(row_5, f"field_{boolean_field.id}") is False assert getattr(row_5, f"field_{text_field_2.id}") == "" row_3 = rows[3] assert row_3.id == response_json_row_3["id"] assert getattr(row_3, f"field_{text_field.id}") == "Green" assert getattr(row_3, f"field_{number_field.id}") == 120 assert getattr(row_3, f"field_{boolean_field.id}") is True assert getattr(row_3, f"field_{text_field_2.id}") == "Not important" row_4 = rows[4] assert row_4.id == response_json_row_4["id"] assert getattr(row_4, f"field_{text_field.id}") == "Purple" assert getattr(row_4, f"field_{number_field.id}") == 240 assert getattr(row_4, f"field_{boolean_field.id}") is True assert getattr(row_4, f"field_{text_field_2.id}") == ""
def test_create_row(api_client, data_fixture): user, jwt_token = data_fixture.create_user_and_token() table = data_fixture.create_database_table(user=user) table_2 = data_fixture.create_database_table() text_field = data_fixture.create_text_field(table=table, order=0, name='Color', text_default='white') number_field = data_fixture.create_number_field(table=table, order=1, name='Horsepower') boolean_field = data_fixture.create_boolean_field(table=table, order=2, name='For sale') text_field_2 = data_fixture.create_text_field(table=table, order=3, name='Description') token = TokenHandler().create_token(user, table.database.group, 'Good') wrong_token = TokenHandler().create_token(user, table.database.group, 'Wrong') TokenHandler().update_token_permissions(user, wrong_token, False, True, True, True) response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': 99999}), {f'field_{text_field.id}': 'Test 1'}, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') assert response.status_code == HTTP_404_NOT_FOUND assert response.json()['error'] == 'ERROR_TABLE_DOES_NOT_EXIST' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), {f'field_{text_field.id}': 'Test 1'}, format='json', HTTP_AUTHORIZATION='Token abc123') assert response.status_code == HTTP_401_UNAUTHORIZED assert response.json()['error'] == 'ERROR_TOKEN_DOES_NOT_EXIST' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), {f'field_{text_field.id}': 'Test 1'}, format='json', HTTP_AUTHORIZATION=f'Token {wrong_token.key}') assert response.status_code == HTTP_401_UNAUTHORIZED assert response.json()['error'] == 'ERROR_NO_PERMISSION_TO_TABLE' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table_2.id}), {f'field_{text_field.id}': 'Green'}, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') assert response.status_code == HTTP_400_BAD_REQUEST assert response.json()['error'] == 'ERROR_USER_NOT_IN_GROUP' url = reverse('api:database:rows:list', kwargs={'table_id': table.id}) response = api_client.post(f'{url}?before=99999', {f'field_{text_field.id}': 'Green'}, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') assert response.status_code == HTTP_404_NOT_FOUND assert response.json()['error'] == 'ERROR_ROW_DOES_NOT_EXIST' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), { f'field_{text_field.id}': 'Green', f'field_{number_field.id}': -10, f'field_{boolean_field.id}': None, f'field_{text_field_2.id}': None }, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') response_json = response.json() assert response.status_code == HTTP_400_BAD_REQUEST assert response_json['error'] == 'ERROR_REQUEST_BODY_VALIDATION' assert len(response_json['detail']) == 2 assert response_json['detail'][f'field_{number_field.id}'][0][ 'code'] == 'min_value' assert response_json['detail'][f'field_{boolean_field.id}'][0][ 'code'] == 'null' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), {}, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') response_json_row_1 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_1[f'field_{text_field.id}'] == 'white' assert not response_json_row_1[f'field_{number_field.id}'] assert response_json_row_1[f'field_{boolean_field.id}'] is False assert response_json_row_1[f'field_{text_field_2.id}'] is None assert response_json_row_1['order'] == '1.00000000000000000000' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), { f'field_{number_field.id}': None, f'field_{boolean_field.id}': False, f'field_{text_field_2.id}': '', }, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') response_json_row_2 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_2[f'field_{text_field.id}'] == 'white' assert not response_json_row_2[f'field_{number_field.id}'] assert response_json_row_2[f'field_{boolean_field.id}'] is False assert response_json_row_2[f'field_{text_field_2.id}'] == '' assert response_json_row_2['order'] == '2.00000000000000000000' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), { f'field_{text_field.id}': 'Green', f'field_{number_field.id}': 120, f'field_{boolean_field.id}': True, f'field_{text_field_2.id}': 'Not important', }, format='json', HTTP_AUTHORIZATION=f'JWT {jwt_token}') response_json_row_3 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_3[f'field_{text_field.id}'] == 'Green' assert response_json_row_3[f'field_{number_field.id}'] == '120' assert response_json_row_3[f'field_{boolean_field.id}'] assert response_json_row_3[f'field_{text_field_2.id}'] == 'Not important' assert response_json_row_3['order'] == '3.00000000000000000000' response = api_client.post(reverse('api:database:rows:list', kwargs={'table_id': table.id}), { f'field_{text_field.id}': 'Purple', f'field_{number_field.id}': 240, f'field_{boolean_field.id}': True, f'field_{text_field_2.id}': '' }, format='json', HTTP_AUTHORIZATION=f'Token {token.key}') response_json_row_4 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_4[f'field_{text_field.id}'] == 'Purple' assert response_json_row_4[f'field_{number_field.id}'] == '240' assert response_json_row_4[f'field_{boolean_field.id}'] assert response_json_row_4[f'field_{text_field_2.id}'] == '' assert response_json_row_4['order'] == '4.00000000000000000000' token.refresh_from_db() assert token.handled_calls == 1 url = reverse('api:database:rows:list', kwargs={'table_id': table.id}) response = api_client.post(f"{url}?before={response_json_row_3['id']}", { f'field_{text_field.id}': 'Red', f'field_{number_field.id}': 480, f'field_{boolean_field.id}': False, f'field_{text_field_2.id}': '' }, format='json', HTTP_AUTHORIZATION=f'Token {token.key}') response_json_row_5 = response.json() assert response.status_code == HTTP_200_OK assert response_json_row_5[f'field_{text_field.id}'] == 'Red' assert response_json_row_5[f'field_{number_field.id}'] == '480' assert not response_json_row_5[f'field_{boolean_field.id}'] assert response_json_row_5[f'field_{text_field_2.id}'] == '' assert response_json_row_5['order'] == '2.99999999999999999999' token.refresh_from_db() assert token.handled_calls == 2 model = table.get_model() assert model.objects.all().count() == 5 rows = model.objects.all() row_1 = rows[0] assert row_1.id == response_json_row_1['id'] assert getattr(row_1, f'field_{text_field.id}') == 'white' assert getattr(row_1, f'field_{number_field.id}') is None assert getattr(row_1, f'field_{boolean_field.id}') is False assert getattr(row_1, f'field_{text_field_2.id}') is None row_2 = rows[1] assert row_2.id == response_json_row_2['id'] assert getattr(row_2, f'field_{text_field.id}') == 'white' assert getattr(row_2, f'field_{number_field.id}') is None assert getattr(row_2, f'field_{boolean_field.id}') is False assert getattr(row_2, f'field_{text_field_2.id}') == '' row_5 = rows[2] assert row_5.id == response_json_row_5['id'] assert getattr(row_5, f'field_{text_field.id}') == 'Red' assert getattr(row_5, f'field_{number_field.id}') == 480 assert getattr(row_5, f'field_{boolean_field.id}') is False assert getattr(row_5, f'field_{text_field_2.id}') == '' row_3 = rows[3] assert row_3.id == response_json_row_3['id'] assert getattr(row_3, f'field_{text_field.id}') == 'Green' assert getattr(row_3, f'field_{number_field.id}') == 120 assert getattr(row_3, f'field_{boolean_field.id}') is True assert getattr(row_3, f'field_{text_field_2.id}') == 'Not important' row_4 = rows[4] assert row_4.id == response_json_row_4['id'] assert getattr(row_4, f'field_{text_field.id}') == 'Purple' assert getattr(row_4, f'field_{number_field.id}') == 240 assert getattr(row_4, f'field_{boolean_field.id}') is True assert getattr(row_4, f'field_{text_field_2.id}') == ''