def test_coordinates_are_optionnal_for_grab(self): move = self.blend_move(type=MOVE_TYPE_DIPPED) payload = MovePayload(MOVE_TYPE_GRABBED)\ .set_id(move.id) payload.patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_GRABBED) payload.set_coordinates()\ .patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_GRABBED)
def test_from_non_authenticated_move_type_need_tracking_code(self): move = self.blend_move(type=MOVE_TYPE_COMMENT) payload = MovePayload(MOVE_TYPE_GRABBED)\ .set_id(move.id) payload.patch(move.id, user=self.admin, code=422)\ .assertRaiseJsonApiError('/data/attributes/tracking-code') payload.set_tracking_code(move.geokret.tracking_code)\ .patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_GRABBED)
def test_author_change_restrictions(self): move = self.blend_move(type=MOVE_TYPE_GRABBED, author=self.user_1) payload = MovePayload(MOVE_TYPE_GRABBED)\ .set_id(move.id)\ .set_author(self.user_2.id) payload.patch(move.id, user=self.user_1, code=403)\ .assertRaiseJsonApiError('/data/relationships/author') payload.patch(move.id, user=self.admin) self.assertEqual(move.author.id, self.user_2.id)
def test_must_include_coordinates_if_missing_from_last_move(self): move = self.blend_move(type=MOVE_TYPE_GRABBED) payload = MovePayload(MOVE_TYPE_DIPPED)\ .set_id(move.id) payload.patch(move.id, user=self.admin, code=422)\ .assertRaiseJsonApiError('/data/attributes/latitude')\ .assertRaiseJsonApiError('/data/attributes/longitude') payload.set_coordinates()\ .patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_DIPPED)
def test_geokret_relation_can_be_changed_only_by_admin(self): geokret = self.blend_geokret() move = self.blend_move(type=MOVE_TYPE_GRABBED, author=self.user_1) payload = MovePayload(MOVE_TYPE_GRABBED)\ .set_id(move.id)\ .set_geokret(geokret.id) payload.patch(move.id, user=self.user_1, code=403)\ .assertRaiseJsonApiError('/data/relationships/geokret') payload.patch(move.id, user=self.admin) self.assertEqual(move.geokret.id, geokret.id)
def test_convert_to_dropped(self): move = self.blend_move(type=MOVE_TYPE_GRABBED) payload = MovePayload(MOVE_TYPE_DROPPED)\ .set_id(move.id) payload.patch(move.id, user=self.admin, code=422)\ .assertRaiseJsonApiError('/data/attributes/latitude')\ .assertRaiseJsonApiError('/data/attributes/longitude') payload.set_coordinates()\ .patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_DROPPED) self.assertEqual(float(move.latitude), 43.78) self.assertEqual(float(move.longitude), 7.06)
def test_move_datetime_cannot_be_before_geokret_birth(self): geokret = self.blend_geokret(created_on_datetime='2018-12-28T15:25:56') move = self.blend_move(type=MOVE_TYPE_GRABBED, geokret=geokret, author=self.user_1) payload = MovePayload(MOVE_TYPE_GRABBED)\ .set_id(move.id)\ .set_moved_on_datetime('2018-12-28T14:00:00') payload.patch(move.id, user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/attributes/moved-on-datetime') payload.set_moved_on_datetime(geokret.created_on_datetime)\ .patch(move.id, user=self.user_1)
def test_convert_to_grabbed(self): move = self.blend_move(type=MOVE_TYPE_DROPPED, latitude=43.78, longitude=7.06) payload = MovePayload(MOVE_TYPE_GRABBED)\ .set_id(move.id) payload.patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_GRABBED) self.assertEqual(float(move.latitude), 43.78) self.assertEqual(float(move.longitude), 7.06) payload.set_coordinates(None, None)\ .patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_GRABBED) self.assertIsNone(move.latitude) self.assertIsNone(move.longitude)
def test_move_datetime_same_as_another_move(self): geokret = self.blend_geokret(created_on_datetime='2018-12-28T16:26:16') move_1 = self.blend_move(type=MOVE_TYPE_GRABBED, geokret=geokret, author=self.user_1, moved_on_datetime='2018-12-28T16:26:49') move_2 = self.blend_move(type=MOVE_TYPE_GRABBED, geokret=geokret, author=self.user_1, moved_on_datetime='2018-12-28T16:26:58') payload = MovePayload(MOVE_TYPE_DIPPED)\ .set_id(move_2.id)\ .set_coordinates()\ .set_moved_on_datetime(move_2.moved_on_datetime) payload.patch(move_2.id, user=self.user_1) payload.set_moved_on_datetime(move_1.moved_on_datetime)\ .patch(move_2.id, user=self.user_1, code=422)\ .assertRaiseJsonApiError('/data/attributes/moved-on-datetime')
def test_convert_to_seen(self): move = self.blend_move(type=MOVE_TYPE_DROPPED, latitude=43.78, longitude=7.06) payload = MovePayload(MOVE_TYPE_SEEN)\ .set_id(move.id) payload.patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_SEEN) self.assertEqual(float(move.latitude), 43.78) self.assertEqual(float(move.longitude), 7.06) payload._set_attribute('latitude', 43.79)\ .patch(move.id, user=self.admin) self.assertEqual(move.type, MOVE_TYPE_SEEN) self.assertEqual(float(move.latitude), 43.79) self.assertEqual(float(move.longitude), 7.06) payload.set_coordinates(None, None)\ .patch(move.id, user=self.admin, code=422)\ .assertRaiseJsonApiError('/data/attributes/latitude')\ .assertRaiseJsonApiError('/data/attributes/longitude')