mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2025-12-12 12:22:12 +00:00
Add custom assertions
This commit is contained in:
parent
b32ab99649
commit
be0222311e
59
postgres/asserts.sql
Normal file
59
postgres/asserts.sql
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
CREATE OR REPLACE FUNCTION test_assertEquals(message TEXT, expected ANYELEMENT, result ANYELEMENT) RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
IF expected = result THEN
|
||||||
|
null;
|
||||||
|
ELSE
|
||||||
|
raise exception '%: expect ''%'' instead of ''%''', message, expected, result using errcode = 'triggered_action_exception';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_assertEquals(expected ANYELEMENT, result ANYELEMENT) RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEquals('assertEquals failure', expected, result);
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_assertEqualsArray(expected VARCHAR[], result VARCHAR[]) RETURNS VOID AS $$
|
||||||
|
DECLARE
|
||||||
|
line RECORD;
|
||||||
|
error_message text;
|
||||||
|
BEGIN
|
||||||
|
IF expected = result THEN
|
||||||
|
null;
|
||||||
|
ELSE
|
||||||
|
error_message := 'assertEqualsArray failure:';
|
||||||
|
FOR line IN SELECT expected_item, result_item FROM (SELECT unnest(expected) AS expected_item, unnest(result) AS result_item) x
|
||||||
|
LOOP
|
||||||
|
IF line.expected_item = line.result_item THEN
|
||||||
|
error_message := CONCAT(error_message, E'\n', '= ', line.expected_item);
|
||||||
|
ELSE
|
||||||
|
error_message := CONCAT(error_message, E'\n', '- ', line.expected_item);
|
||||||
|
error_message := CONCAT(error_message, E'\n', '+ ', line.result_item);
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
raise exception '%', error_message using errcode = 'triggered_action_exception';
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_assertEquals_golden_master(expected VARCHAR[], result VARCHAR[]) RETURNS VOID as $$
|
||||||
|
DECLARE
|
||||||
|
golden TEXT;
|
||||||
|
line VARCHAR;
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEqualsArray(expected, result);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN triggered_action_exception THEN
|
||||||
|
golden := CONCAT(SQLERRM, E'\n\n', E'For update, copy:\n');
|
||||||
|
golden := CONCAT(golden, E'expected := ARRAY[');
|
||||||
|
FOREACH line IN ARRAY result
|
||||||
|
LOOP
|
||||||
|
golden := CONCAT(golden, E'\n', '''', line, ''',');
|
||||||
|
END LOOP;
|
||||||
|
golden := CONCAT(golden, E'\n', '];');
|
||||||
|
|
||||||
|
raise exception '%', golden using errcode = 'triggered_action_exception';
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
95
postgres/asserts_tests.sql
Normal file
95
postgres/asserts_tests.sql
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEquals_numeric_should_fail_if_not_equals() RETURNS VOID AS $$
|
||||||
|
DECLARE
|
||||||
|
expected_message VARCHAR;
|
||||||
|
error_message VARCHAR;
|
||||||
|
is_equals BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEquals(7, 5);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN triggered_action_exception THEN
|
||||||
|
expected_message := 'assertEquals failure: expect ''7'' instead of ''5''';
|
||||||
|
error_message := SQLERRM;
|
||||||
|
perform test_assertTrue(format('Expect message ''%s'' instead of ''%s'' ', expected_message, error_message), error_message = expected_message);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEquals_numeric_should_success_if_equals() RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEquals(7, 7);
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEquals_text_should_fail_if_not_equals() RETURNS VOID AS $$
|
||||||
|
DECLARE
|
||||||
|
expected_message VARCHAR;
|
||||||
|
error_message VARCHAR;
|
||||||
|
is_equals BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEquals('hello'::VARCHAR, 'olleh');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN triggered_action_exception THEN
|
||||||
|
expected_message := 'assertEquals failure: expect ''hello'' instead of ''olleh''';
|
||||||
|
error_message := SQLERRM;
|
||||||
|
perform test_assertTrue(format('Expect message ''%s'' instead of ''%s'' ', expected_message, error_message), error_message = expected_message);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEquals_text_should_success_if_equals() RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEquals('hello'::VARCHAR, 'hello');
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEquals_should_display_custom_message_if_defined() RETURNS VOID AS $$
|
||||||
|
DECLARE
|
||||||
|
expected_message VARCHAR;
|
||||||
|
error_message VARCHAR;
|
||||||
|
is_equals BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEquals('Test with custom message', 'hello'::VARCHAR, 'olleh');
|
||||||
|
EXCEPTION
|
||||||
|
WHEN triggered_action_exception THEN
|
||||||
|
expected_message := 'Test with custom message: expect ''hello'' instead of ''olleh''';
|
||||||
|
error_message := SQLERRM;
|
||||||
|
perform test_assertTrue(format('Expect message ''%s'' instead of ''%s'' ', expected_message, error_message), error_message = expected_message);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEqualsArray_should_success_if_equals() RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEqualsArray(ARRAY['1','2'], ARRAY['1','2']);
|
||||||
|
perform test_assertEqualsArray(ARRAY['a','b'], ARRAY['a','b']);
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
CREATE OR REPLACE FUNCTION test_case_assertEqualsArray_should_display_diff_if_failed() RETURNS VOID AS $$
|
||||||
|
DECLARE
|
||||||
|
expected_message VARCHAR;
|
||||||
|
error_message VARCHAR;
|
||||||
|
is_equals BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
BEGIN
|
||||||
|
perform test_assertEqualsArray(ARRAY['1','2','3','4'], ARRAY['1','2','4','4']);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN triggered_action_exception THEN
|
||||||
|
expected_message := CONCAT(
|
||||||
|
'assertEqualsArray failure:', E'\n',
|
||||||
|
'= 1', E'\n',
|
||||||
|
'= 2', E'\n',
|
||||||
|
'- 3', E'\n',
|
||||||
|
'+ 4', E'\n',
|
||||||
|
'= 4'
|
||||||
|
);
|
||||||
|
error_message := SQLERRM;
|
||||||
|
perform test_assertTrue(format('Expect message ''%s'' instead of ''%s'' ', expected_message, error_message), error_message = expected_message);
|
||||||
|
END;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
||||||
|
SELECT * FROM test_run_all();
|
||||||
Loading…
Reference in New Issue
Block a user