##### Before
```
$ bin/rspec spec/system/admin/order_cycles/simple_spec.rb:460
Running via Spring preloader in process 79308
Run options: include {:locations=>{"./spec/system/admin/order_cycles/simple_spec.rb"=>[460]}}
As an administrator
I want to manage simple order cycles
as an enterprise user
that is a manager of the coordinator
when variants are hidden via inventory settings
Capybara starting Puma...
* Version 6.5.0, codename: Sky's Version
* Min threads: 0, max threads: 4
* Listening on http://127.0.0.1:51103
shows a warning when going to 'outgoing products' tab
Finished in 3.95 seconds (files took 0.45949 seconds to load)
1 example, 0 failures
```
##### After
```
$ bin/rspec spec/system/admin/order_cycles/simple_spec.rb:460
Running via Spring preloader in process 79234
Run options: include {:locations=>{"./spec/system/admin/order_cycles/simple_spec.rb"=>[460]}}
As an administrator
I want to manage simple order cycles
as an enterprise user
that is a manager of the coordinator
when variants are hidden via inventory settings
shows a warning when going to 'outgoing products' tab
Finished in 4.03 seconds (files took 0.49981 seconds to load)
1 example, 0 failures
```
Rails 4.1 added time helpers but we never bothered using them. But now
I'm getting rid of the Timecop dependency and use standard helpers.
Beware though that the new helpers always freeze time. When you travel
to a certain date then the clock stops ticking while Timecop maintained
the passing of time.
The freezing of time could cause problems if you are trying to enforce a
timeout. But all current specs don't seem affected.
In most cases, the freezing will make it easier to avoid flaky specs.
Most production servers don't use the source locale `en`. Even if the
default language is English, they use a local variant like `en_AU` or
`en_GB` to customise some of the translations.
However the environment is configured, the app should always fallback to
`en` if no other translation is available.
One spec failed due to this new behaviour. Converting the shared
examples to simple blocks solved this. But the specs could probably be
written better now. I didn't invest this time.
It fails in CI and features are not seen as enabled. So we copy the
important part of the test helper into our code, which works.
It's probably about the point in time when the adapter is instantiated.
This avoids a locale setting leaking from one spec to another. It also
means that we don't have to reset the locale in individual specs.
Also:
- `cookies` is reset automatically and we don't need to do that.
- Removed some unused code (German number format and helper methods).
These config values are relatively static but in some cases they can be called many times in the same request (like rendering a report or a large list of line_items in BOM). These values will now only get fetched from Redis/Postgres once at most per request/job.
These shared examples were used in only one spec file. It's much easier
to read having all the related specs in one file instead of hiding some
in a helper module.
It's also one less file to load whenever we run specs.
I couldn't find a built-in way to do it, and couldn't even directly access the vcr config outside of VCR.configure. So this is the best way I could think of.
Many report specs are still testing the old behaviour. We need to
migrate them to background reports. Some tests may be better as unit
tests instead of system tests.