-
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 |
theory
left a comment
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.
|
Hi, I am going to implement the following features. Please let me know if you think they are a good idea too.
|
theory
left a comment
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.
Honestly this is a huge feature that I think should probably be its own extension, either distributed separately and depending on pgtap (perhaps a release that includes changes to tap_funky that it requires) or else a separate extension as part of the pgTAP distribution. I'm leaning toward the former, at least as you work through the process, because I'm not sure I have the capacity to take on maintaining such a huge feature I don't use. I'm happy to review code and make recommendations if you decide to distribute it as its own extension.
Seems like it, yes, but again I think this is full-featured enough that it might be better developed and distributed as its own extension. |
I am pleasantly surprised to read this. Okay, no problem, I can go with my own extension depending on pgTap. Could you please explain. When you talk about a separate extension as part of the pgTap what do you mean exactly? |
|
A project can have more than one extension. This one has three (pgtap, pgtap-core, and pgtap-schema. Each just needs its own control file, SQL files, and entry in |
|
So, what is the best solution? |
I suggest you continue developing in your own project, a separate repo. I'd be happy to review stuff there if yo find it helpful (and I'll make a whole lot fewer style comments :-)). Make a new PR for revisions to Overall this will give you a lot more freedom and control over the extension and how it works. |
Hello @theory |
They're for embedding in other extension packages. For example, semver includes
No, they were just examples, and not great ones, TBH, since they have no control files.
PGXN uses Text::Markup to render documentation as HTML; for HTH! |
|
@theory I moved all my code to my own repo.
Yes, that's how it works. Do you see any problems with that?
Did not think about C functions, but it seems I have to. Anyway, I have to handle a case when user did not provide schema. I love your suggestion to review my code. Will ask you. I have fixed most issues you shown in my repo. |
|
Reviewing the changes to tap_funky, I'm starting to wonder whether they're needed in pgTAP, or if you'd be able to use a function or view in your mock extension to get all the info you need for mocking. What do you think? |
You wrote early.
That's why I created my own extension and made this change to tap_funky. Just after creating a new extension, I realized that my code depends on your cool feature which rolls back any changes made during tests immediately after they finish. Therefore, my code doesn't make sense without pgTap. In other words, my features are being developed specifically for a unit testing framework. I can keep my code in my fork. However, could you clarify what you meant by
|
This reverts commit 1121ab5.
That's just transaction rollback, it's not controlled by pgTAP but by the tests themselves.
I tried to get at that in this reply. |
You do raise exception in the _runner function always. That's how I think changes are rolled back. And if a user isn't going to install pgTap invoke any my code will damage the DB. They only make sense within a test. I am sorry, but I do not understand how a user can install an extension which comes along with pgTap. I mean if there is a control file and entries in META.json. Just realised that I can write something like this in my own totally separate extension. And this is a real option, isn't it? pgMocking extensioncomment = 'An extension expanding pgTap with mocking and faking functionality' |
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.