# |
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');``` |
# |
Jun 11th 2021, 14:37 |
greg138 |
I think you want to set the Referer header rather than environment? |
# |
Jun 11th 2021, 14:19 |
a.vanniel |
Good afternoon everyone. Does anyone potentially know how to set the http_referer for unit testing? I have this code that acts differently depending on the origin (referrer) and I though this would be the sollution but it does not seem to work: ```$this->configRequest([ 'environment' => ['HTTP_REFERER' => '/mediafiles/view/6'], ]);``` instead the default '/' remains set as the referrer. |
# |
Jun 11th 2021, 12:44 |
kevin.pfeifer |
I personally would love some sort of hook or event system added to the default form and html helpers to adjust the outputted HTML but never had the time to jump into it |
# |
Jun 11th 2021, 12:43 |
kevin.pfeifer |
sure, thats the most flexible one but the most tedious one :) |
# |
Jun 11th 2021, 12:43 |
tomrwaller |
Looks like I have some reading to do. Thanks @kevin.pfeifer. I also just tried adding the class=>form-control to the text controls in my views and that works too. It's a little more code on the view but gets me out of a pickle for now. |
# |
Jun 11th 2021, 12:19 |
kevin.pfeifer |
the “problem” with that approach is, that you need to manually adjust your overwritten functions if the “core” formhelper makes updates/changes |
# |
Jun 11th 2021, 12:12 |
kevin.pfeifer |
if you dont use FormHelper as a class you will need to specify that in your `src/View/AppView.php` initialize function via ``` $this->loadHelper( 'Form', [ 'templates' => 'app_form', // will load templates from config/app_form.php 'className' => 'MyForm' ] );``` |
# |
Jun 11th 2021, 12:11 |
kevin.pfeifer |
its the same for cakephp 4 |
# |
Jun 11th 2021, 12:11 |
kevin.pfeifer |
basically that https://stackoverflow.com/questions/57730430/cakephp-3-how-to-extend-an-helper |
# |
Jun 11th 2021, 12:10 |
tomrwaller |
I didn't! Although I suspected there is a whole bunch you can do that I have no clue about! Do you have a link or search term I can look for in the book maybe? |
# |
Jun 11th 2021, 12:08 |
kevin.pfeifer |
sure :) Do you know that you can extend basically any class and use that instead of the “core” one to have some custom logic in there? |
# |
Jun 11th 2021, 12:07 |
tomrwaller |
Sorry! I think this is my lack of knowledge shining through :) I have a Form Template not Helper. |
# |
Jun 11th 2021, 12:06 |
kevin.pfeifer |
or am I not aware of some feature that the Helpers can do with these form templates :thinking_face: |
# |
Jun 11th 2021, 12:00 |
kevin.pfeifer |
no i mean do you have `src/View/Helper/MyFormHelper.php` which extends the base FormHelper |