# |
Jun 12th 2021, 19:16 |
kevin.pfeifer |
well `$this->autoRender = false;` prevents the view from being rendering and therefore all your logic is just in the controller |
# |
Jun 12th 2021, 19:07 |
davinci |
ah, so no need to `echo ... exit();` - just return the response. That seems cleaner |
# |
Jun 12th 2021, 18:56 |
kevin.pfeifer |
if its better/worse or something else I have no idea |
# |
Jun 12th 2021, 18:56 |
kevin.pfeifer |
I like doing that ```$response = $this->getResponse(); $this->autoRender = false; return $response->withType( 'application/json' ) ->withStringBody( json_encode( $results ) );``` |
# |
Jun 12th 2021, 18:54 |
davinci |
I've always used a view, but see someone using an exit, and thought... hmm, maybe that's faster? |
# |
Jun 12th 2021, 18:54 |
davinci |
In an ajax call, is it better to echo json data then exit right from the controller, or use an ajax view? |
# |
Jun 11th 2021, 15:30 |
admad |
Mention that HTTP_HOST was set through phpunit.xml |
# |
Jun 11th 2021, 15:28 |
admad |
@a.vanniel plz open an issue on the cakephp/app repo. |
# |
Jun 11th 2021, 15:28 |
admad |
We could modify that line to first check for HTTP_HOST and use "localhost" only of it's not available. |
# |
Jun 11th 2021, 15:15 |
ndm |
Sure, generally these settings would allow that, but CakePHP does what CakePHP does. Respecting those configs would probably cause a lot of trouble with people that touch the superglobals directly, being in their apps or in their tests. Anyways, godspeed :upside_down_face: |
# |
Jun 11th 2021, 15:10 |
a.vanniel |
Thanks @ndm! |
# |
Jun 11th 2021, 15:10 |
a.vanniel |
I have commented out the offending line though and now the test succeeds because the expected url was set... |
# |
Jun 11th 2021, 15:10 |
a.vanniel |
At least, that is what I understood of the xml file... |
# |
Jun 11th 2021, 15:09 |
a.vanniel |
Using the phpunit.xml those super globals could be set and thus have the tests approach more closely the sort of real life situations... |
# |
Jun 11th 2021, 15:08 |
ndm |
Probably... I think all the globals for the server request object are being filled with custom data in integration tests, ie the PHP supergobals are not being touched. |
# |
Jun 11th 2021, 15:06 |
a.vanniel |
or it actually defeats the purpose of the server variable as well. |
# |
Jun 11th 2021, 15:06 |
a.vanniel |
It kinda defeats the purpose of the HTTP_HOST environment key in the phpunit.xml I guess. |
# |
Jun 11th 2021, 15:06 |
ndm |
I think there's also places internally in the core where `App.fullBaseUrl` is being overwritten... so, you might not be off the hook if you'd wanted to use your custom host setting. |
# |
Jun 11th 2021, 15:04 |
ndm |
Actually, yes, it's the default :) Didn't remember that one. |
# |
Jun 11th 2021, 15:04 |
ndm |
Good question.... |
# |
Jun 11th 2021, 15:03 |
a.vanniel |
Is that per default? Or do I have to start kicking one of my colleagues here? |
# |
Jun 11th 2021, 15:02 |
a.vanniel |
wow. |
# |
Jun 11th 2021, 15:02 |
a.vanniel |
wait... I found it in the tests\bootstrap.php file... |
# |
Jun 11th 2021, 15:02 |
a.vanniel |
I did a debug of env('HTTP_HOST') in the controller I am testing and I get this: http://pearson.presenter.local so that is what it should be, |
# |
Jun 11th 2021, 15:00 |
a.vanniel |
bootstrap_cli.php does not overwrite it.. that line is commented out it only contains the lines to configure the debug and error log file names. |
# |
Jun 11th 2021, 14:59 |
ndm |
So `env('HTTP_HOST)` returns the expected result? Then maybe check if the option is being overwritten in `bootstrap_cli.php` |
# |
Jun 11th 2021, 14:58 |
a.vanniel |
FYI the fullBaseUrl setting in the config file of the application is set to false... so this should use the HTTP_HOST |
# |
Jun 11th 2021, 14:57 |
a.vanniel |
welll. this is rather weird... $ref is set to the url I provided, however the $base is set to http://localhost eventhough I have set this in the phpunit.xml: ```<server name="HTTP_HOST" value="http://pearson.presenter.local" />``` and this actually does work ... so I wonder why $base would be set to localhost ... and since the default is to return a local address... well, this probably fails since the base is different... |
# |
Jun 11th 2021, 14:54 |
ndm |
And I guess debug `$ref` too while you're at it, just to make sure a value is actually set. |
# |
Jun 11th 2021, 14:53 |
ndm |
Ok, now try a `debug($base)` in the `referer()` method to see what is being expected. |
# |
Jun 11th 2021, 14:51 |
a.vanniel |
I know, environment should not be set since it is a header setting... but just to be sure :) |
# |
Jun 11th 2021, 14:51 |
slackebot |
'http://pearson.presenter.local/mediafiles/view/6', ], ]);``` still the $this->referer() in the controller to be tested, results in '/' |
# |
Jun 11th 2021, 14:51 |
a.vanniel |
Just so I was sure I had set all of them, I did these right before the $this->get() in the test: ```$this->configRequest([ 'headers' => [ 'HTTP_REFERER' => 'http://pearson.presenter.local/mediafiles/view/6', 'REFERER' => 'http://pearson.presenter.local/mediafiles/view/6', ], 'environment' =>[ 'HTTP_REFERER' => 'http://pearson.presenter.local/mediafiles/view/6', 'REFERER' => |
# |
Jun 11th 2021, 14:50 |
ndm |
Well do both, an absolute and a header without `HTTP_`. Then make sure that the full URL that you are providing starts with what is set for `App.fullBaseUrl`. It might be different to what you expect in your tests. |
# |
Jun 11th 2021, 14:47 |
a.vanniel |
it keeps giving me '/' as the referer... |
# |
Jun 11th 2021, 14:47 |
a.vanniel |
Unfortunately setting the referer key to the absolute url did not seem to change anything $this->referer() is returning in the controller. |
# |
Jun 11th 2021, 14:45 |
kevin.pfeifer |
we literally talked about that yesterday :) |
# |
Jun 11th 2021, 14:45 |
ndm |
Well, maybe not in any case... but at least when `App.fullBaseUrl` is set to a URL. |
# |
Jun 11th 2021, 14:45 |
slackebot |
<kevin.pfeifer> |
# |
Jun 11th 2021, 14:44 |
ndm |
Don't use the `HTTP_` prefix in headers, it will be added automatically where required. That being said, passing the full name via `environment` should work too, but in any case you need to use absolute URLs. |
# |
Jun 11th 2021, 14:40 |
a.vanniel |
I at first tried this: ```$this->configRequest([ 'headers' => ['HTTP_REFERER' => '/mediafiles/view/6'], ]);``` but that did not change anything and after digging in how cake determines the $this->referer()I figured it could be an environment setting ... seeing this is inside the ServerRequest::referer() method: ```public function referer(bool $local = true): ?string { $ref = $this->getEnv('HTTP_REFERER');``` |