From 6b7c9e5de9a2df70290b1efd79e2f6e41447ed1b Mon Sep 17 00:00:00 2001 From: fpellet Date: Fri, 13 Dec 2019 10:48:51 +0100 Subject: [PATCH] Add test sample --- postgres/run_tests.sql | 102 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 96 insertions(+), 6 deletions(-) diff --git a/postgres/run_tests.sql b/postgres/run_tests.sql index b3aca573..fedb6984 100644 --- a/postgres/run_tests.sql +++ b/postgres/run_tests.sql @@ -1,7 +1,97 @@ -create or replace function test_case_can_create_item() returns void as $$ -begin - perform test_assertTrue('hello', true); -end; -$$ language plpgsql; +CREATE OR REPLACE FUNCTION test_case_update_quality() RETURNS void AS $$ +DECLARE + sell_in_result item.sell_in%TYPE; + quality_result item.quality%TYPE; +BEGIN + TRUNCATE TABLE item; + CALL new_item('Aged Brie', 4, 6); -select * from test_run_all(); \ No newline at end of file + CALL update_quality(); + + SELECT quality, sell_in FROM item INTO quality_result, sell_in_result; + perform test_assertEquals('Quality should increase', 7.0, quality_result); + perform test_assertEquals('Sell in should decrease', 3.0, sell_in_result); +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION format_day(day INTEGER) RETURNS TEXT[] AS $$ +DECLARE + result TEXT[]; + item_result RECORD; +BEGIN + result := ARRAY[CONCAT('-------- day ', day, ' --------')]; + result := result || 'name, sellIn, quality'::TEXT; + + FOR item_result IN (SELECT name, sell_in, quality FROM item ORDER BY name ASC, sell_in ASC, quality ASC) + LOOP + result := result || format('%s, %s, %s', item_result.name, item_result.sell_in, item_result.quality); + END LOOP; + + RETURN result; +END; +$$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION test_case_update_quality_golden_master() RETURNS VOID AS $$ +DECLARE + sell_in_result item.sell_in%TYPE; + quality_result item.quality%TYPE; + days INTEGER; + result TEXT[]; + expected TEXT[]; + item_result RECORD; +BEGIN + -- given + TRUNCATE TABLE item; + CALL new_item('+5 Dexterity Vest', 10, 20); + CALL new_item('Aged Brie', 2, 0); + CALL new_item('Elixir of the Mongoose', 5, 7); + CALL new_item('Sulfuras, Hand of Ragnaros', 0, 80); + CALL new_item('Sulfuras, Hand of Ragnaros', -1, 80); + CALL new_item('Backstage passes to a TAFKAL80ETC concert', 15, 20); + CALL new_item('Backstage passes to a TAFKAL80ETC concert', 10, 49); + CALL new_item('Backstage passes to a TAFKAL80ETC concert', 5, 49); + -- this conjured item does not work properly yet ; + CALL new_item('Conjured Mana Cake', 3, 6); + days := 1; + + -- when + result := format_day(0); + FOR current_day IN 1 .. days + LOOP + CALL update_quality(); + + result := result || format_day(current_day); + END LOOP; + + -- then + expected := ARRAY[ + '-------- day 0 --------', + 'name, sellIn, quality', + '+5 Dexterity Vest, 10, 20', + 'Aged Brie, 2, 0', + 'Backstage passes to a TAFKAL80ETC concert, 5, 49', + 'Backstage passes to a TAFKAL80ETC concert, 10, 49', + 'Backstage passes to a TAFKAL80ETC concert, 15, 20', + 'Conjured Mana Cake, 3, 6', + 'Elixir of the Mongoose, 5, 7', + 'Sulfuras, Hand of Ragnaros, -1, 80', + 'Sulfuras, Hand of Ragnaros, 0, 80', + '-------- day 1 --------', + 'name, sellIn, quality', + '+5 Dexterity Vest, 9, 19', + 'Aged Brie, 1, 1', + 'Backstage passes to a TAFKAL80ETC concert, 4, 50', + 'Backstage passes to a TAFKAL80ETC concert, 9, 50', + 'Backstage passes to a TAFKAL80ETC concert, 14, 21', + 'Conjured Mana Cake, 2, 5', + 'Elixir of the Mongoose, 4, 6', + 'Sulfuras, Hand of Ragnaros, -1, 80', + 'Sulfuras, Hand of Ragnaros, 0, 80' + ]; + + perform test_assertEquals_golden_master(expected, result); +END; +$$ LANGUAGE plpgsql; + + +SELECT * FROM test_run_all(); \ No newline at end of file