How to implement conditional When method in Karate - karate

I would like to reuse a feature both for POST-ing and PUT-ing a JSON Object. In order to achieve that I am trying to use a condition in the call:
Given param admin = admin
And request role
When method (role.id == null) ? karate.POST : karate.PUT
The error I get:
no step-definition method match found for: method (role.id == null) ? karate.POST : karate.PUT
I checked the documentation and the examples and search for the solution here, but I did not find an answer to this question.
Thanks in advance for the help.

You can use a variable for the method step:
* def action = 'GET'
* url 'https://httpbin.org/get'
* method action
Other than that I have no suggestions. I strongly advise you to not do this kind of "re-use" as it leads to un-readable and un-maintainable tests. Please read this once: https://stackoverflow.com/a/54126724/143475

Related

Call a python method in record rule Odoo

The common syntax of record rules is ['|',('user_id','=',user.id),('user_id','=',False)]]
Is there any possiblilties we can use a python method to get the dynamic ids of user?
For Example
['|',('user_id','=',getuserid()),('user_id','=',False)]
You can try something like,
xml:
['|',('user_id','=', user.env["your.model"].get_userid().id), ('user_id','=',False)]
Py:
def get_userid(self):
domain = []
return self.env["res.user"].search(domain)
Let me know if this works for you.

Karate : How to refer or read variable in Examples section which is defined in Scenario Outline

In karate framework, I am trying refer variable in Examples section which is defined in Scenario Outline. Below is the code snippet of feature file.
Scenario Outline:
* print __row
* def data = read('test.csv')
* def selected = 'TRUE'
* def fun = function(x){ return x.Status == selected }
* def filtered = karate.filter(data, fun)
* print filtered
Examples:
| filtered |
After I execute this, getting below error.
*js failed:
org.graalvm.polyglot.PolyglotException: ReferenceError: "filtered" is not defined*
Can any one please let me know how this can be achieved?
The Scenario Outline is the last thing to take control so you need to understand the flow. Please refer to this answer: https://stackoverflow.com/a/75155712/143475
Maybe you should get a normal Scenario Outline to work before trying advanced things. Take some time to read the documentation: https://github.com/karatelabs/karate#data-driven-tests

How can i get the result of an query from BigQuery in Airflow, and attach it into an email auto-send to me

I want to use dynamic time {{ macros.ds_add(ds, 0) }}, so pandas_gbq.read_gbq doesn't work.
I also used the get_pandas_df of BigQueryHook, it showed 'BigQueryPandasConnector' object has no attribute 'http_error', the document says that I need to override DbApiHook method, but I don't know how.
And is there any solution for this issue? Appreciate for your help, guys.
Use BigQueryGetDataOperator. Following is an example:
Example: ::
get_data = BigQueryGetDataOperator(
task_id='get_data_from_bq',
dataset_id='test_dataset',
table_id='Transaction_partitions',
max_results='100',
selected_fields='DATE',
bigquery_conn_id='airflow-service-account'
)
Official Documentation: https://airflow.readthedocs.io/en/stable/integration.html#bigquerygetdataoperator

m.request: use URL which contains colons

I have a m.request call like this:
mCmdName = "cn:cmd:list:deselectAll";
m.request({
method : "POST",
url : "/testing/cmd/" + mCmdName,
data: data
});
Now m.request calls
xhrOptions.url = parameterizeUrl(xhrOptions.url, xhrOptions.data);
and tries to replace all ':[name]' parts with data[name] which results in 'undefined' as data doesn't contain any of the keys. Data is just the data object of the XHR request.
Is there a way to prohibit this default behavior?
Thanks, Stefan
PS: I'm asking here and not in mithril mailing list because I can't post there for incomprehensible reasons. Maybe somebody can give me a hint on this.
Have you tried
encodeURIComponent("cn:cmd:list:deselectAll")
which gives you
cn%3Acmd%3Alist%3AdeselectAll
If necessary you can decode on the server.

joomla: use API inside an article

I am using the Sourcerer plugin to use PHP code inside my articles. I would like to use the Joomla API/framework inside my article to dynamically set the HTML meta tags and other stuff. I found the setHeadData method that should allow me do that but I have simply no idea as to how calling it.
[Q] Can someone give me 1 example or point me to a tutorial that would help me get started on using that joomla API/framework please?
Answer
Based on the numerous feedbacks all pointing in the same direction, using a content plugin to modify the head data is properly better than doing this via an article. If like me you want to do this in an article here is what I did:
(1) I used the snippet provided by ezpresso to set the head data inside my article.
(2) I modified the libraries/joomla/document/html/renderer/head.php file to change the way the head data was set there.
For instance you can set the title meta tag at step (1) and then at step (2) replace the following line:
$strHtml .= $tab.'<title>'.htmlspecialchars($document->getTitle()).'</title>'.$lnEnd;
with this one:
$strHtml .= $tab.'<title>'.htmlspecialchars($document['metaTags']['standard']['title']).'</title>'.$lnEnd;
You might also want to look into libraries/joomla/document/html/renderer/head.php to do some more cleanup in the head, like getting rid of the generator meta tag that Joomla inserts.
Here is the source code of the method you are referring to:
/**
* Set the html document head data
*
* #access public
* #param array $data The document head data in array form
*/
function setHeadData($data)
{
$this->title = (isset($data['title'])) ? $data['title'] : $this->title;
$this->description = (isset($data['description'])) ? $data['description'] : $this->description;
$this->link = (isset($data['link'])) ? $data['link'] : $this->link;
$this->_metaTags = (isset($data['metaTags'])) ? $data['metaTags'] : $this->_metaTags;
$this->_links = (isset($data['links'])) ? $data['links'] : $this->_links;
$this->_styleSheets = (isset($data['styleSheets'])) ? $data['styleSheets'] : $this->_styleSheets;
$this->_style = (isset($data['style'])) ? $data['style'] : $this->_style;
$this->_scripts = (isset($data['scripts'])) ? $data['scripts'] : $this->_scripts;
$this->_script = (isset($data['script'])) ? $data['script'] : $this->_script;
$this->_custom = (isset($data['custom'])) ? $data['custom'] : $this->_custom;
}
It is implemented in a JDocumentHtml class, which is located in a libraries/joomla/document/html/html.php directory.
Below is the links to some of the examples of how to use it:
setHeadData difference between j1.5 and j1.6
Remove Mootools From Joomla Header
I guess you may call the setHeadData method like this:
$doc =& JFactory::getDocument();
$options = $doc->getHeadData();
$options['metaTags'] = array("tag1", "tag2", "tag3"); // you may change the meta tags here
$doc->setHeadData($options);
Putting PHP in the article is not a very good way to accomplish what you are trying to do. Joomla frameworks has an order of operation that determines when various functions and plugins run. Due to the order of operation, there are numerous functions that will happen after an article is rendered, probably negating any changes you make from within the article. You would be better off either using an extension to handle titles and meta tags rather than trying to do it inside the article.