Example #1
0
    def test_pre_patch_hook(self):
        """
        Make sure pre_patch hook executes successfully
        """
        client = TestClient(
            PiccoloCRUD(
                table=Movie,
                read_only=False,
                hooks=[
                    Hook(hook_type=HookType.pre_patch, callable=remove_spaces)
                ],
            ))

        movie = Movie(name="Star Wars", rating=93)
        movie.save().run_sync()

        new_name = "Star Wars: A New Hope"
        new_name_modified = new_name.replace(" ", "")

        response = client.patch(f"/{movie.id}/", json={"name": new_name})
        self.assertTrue(response.status_code == 200)

        # Make sure the row is returned:
        response_json = json.loads(response.json())
        self.assertTrue(response_json["name"] == new_name_modified)

        # Make sure the underlying database row was changed:
        movies = Movie.select().run_sync()
        self.assertTrue(movies[0]["name"] == new_name_modified)
Example #2
0
    def test_pre_patch_hook_db_lookup(self):
        """
        Make sure pre_patch hook can perform db lookups
        (function will always reset "name" to the original name)
        """
        client = TestClient(
            PiccoloCRUD(
                table=Movie,
                read_only=False,
                hooks=[
                    Hook(hook_type=HookType.pre_patch,
                         callable=look_up_existing)
                ],
            ))

        original_name = "Star Wars"
        movie = Movie(name="Star Wars", rating=93)
        movie.save().run_sync()

        new_name = "Star Wars: A New Hope"

        response = client.patch(f"/{movie.id}/", json={"name": new_name})
        self.assertTrue(response.status_code == 200)

        response_json = json.loads(response.json())
        self.assertTrue(response_json["name"] == original_name)

        movies = Movie.select().run_sync()
        self.assertTrue(movies[0]["name"] == original_name)
Example #3
0
 def test_multi_pre_post_hooks(self):
     """
     Make sure multiple hooks execute in correct order
     """
     client = TestClient(
         PiccoloCRUD(
             table=Movie,
             read_only=False,
             hooks=[
                 Hook(
                     hook_type=HookType.pre_save,
                     callable=set_movie_rating_10,
                 ),
                 Hook(
                     hook_type=HookType.pre_save,
                     callable=set_movie_rating_20,
                 ),
             ],
         ))
     json_req = {"name": "Star Wars", "rating": 93}
     _ = client.post("/", json=json_req)
     movie = Movie.objects().first().run_sync()
     self.assertEqual(movie.rating, 20)
Example #4
0
    def test_delete_hook_fails(self):
        """
        Make sure failing pre_delete hook bubbles up
        (this implicitly also tests that pre_delete hooks execute)
        """
        client = TestClient(
            PiccoloCRUD(
                table=Movie,
                read_only=False,
                hooks=[
                    Hook(hook_type=HookType.pre_delete, callable=failing_hook)
                ],
            ))

        movie = Movie(name="Star Wars", rating=10)
        movie.save().run_sync()

        with self.assertRaises(Exception):
            _ = client.delete(f"/{movie.id}/")