-
Notifications
You must be signed in to change notification settings - Fork 103
Created faking and mocking functions #346
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
mock and fake functions
…in/pgtap into fake_and_mock_functions just pulling from github
…cements to other routines
Fake and mock functions
@theory Hi! Could you please let me know what you think about my PR. I'd appreciate it. |
Sorry, @v-maliutin, hyper busy rn, but will get to it. |
Not a full review, but a couple comments: AFAIK, there's no reason to modify the Instead of building a function body via |
@jnasbyupgrade thank you for your review. Rolled back changes in Unpackaged |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks super interesting, though I'm not sure they need to be procedures. I requested some change, but the big thing that's missing here is documentation. It would be super helpful for comments in the code to explain what each bit is doing and why (primary example, when it creates two mock functions without explanation). But also the new features should be documented in doc/pgtap.mmd
, perhaps with a tutorial.
$$ LANGUAGE sql; | ||
|
||
--added a column "langname" used in mock_func function | ||
CREATE OR REPLACE VIEW tap_funky |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In this file, the original tap_funky
declaration should be updated, not copy-pasted at the end.
LEFT JOIN pg_language l ON l.oid = p.prolang | ||
; | ||
|
||
--this procedure creates a mock in place of a real function |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Procedures were added to Postgres in v11, but PGXN supports back to 9.1. You need a patch in the compat
directory to remove these procedures for versions less than 11, or else convert them to functions.
where "schema" = _func_schema | ||
and "name" = _func_name; | ||
|
||
if _func_language = 'sql' and _returns_set then |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What happens when the specified function isn't found?
end; | ||
$function$;'; | ||
execute _mock_ddl; | ||
_mock_ddl = ' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why are there two function declarations here?
$function$;'; | ||
execute _mock_ddl; | ||
_mock_ddl = ' | ||
create or replace function ' || quote_ident(_func_schema) || '.' || quote_ident(_func_name) || _func_args || ' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
create or replace function ' || quote_ident(_func_schema) || '.' || quote_ident(_func_name) || _func_args || ' | |
create or replace function ' || quote_ident(_func_schema) || '.' || quote_ident(_func_name) || _func_args || ' ' |
Be careful how you quote things. That last bit will end up with something like "foo bar"_func_args
, which I don't think you want. It should be quote_ident(_func_name || _func_args)
. Better still use format()
.
I developed some functions to make writing tests easier. There are examples in the source code. Also, I wrote an article on habr. Here it is https://habr.com/ru/companies/gnivc/articles/877314/. I know it is in Russian, but hope modern translation will help.
Anyway such functionality is in any modern language and wide known. I just bringing it in PG world.
One more thing. I am going to introduce my work and pgTap at pgConf in Moscow on March 31 2025.