hauks96

hauks96

Does anyone have any experience with unit testing modules that need to be tested using DateTime objects with different timezones without having a real timezone database?

I am having trouble understanding how I would mock the timezone database in a way that would allow using methods such as DateTime.new!(Date.t, Time.t, Calendar.time_zone, Calendar.time_zone_database) without failing since the timezone database is not available.

Showing Posts 1 to 6

dimitarvp

dimitarvp

Never tried what you need but I’d think that mock or patch will do the job.

hauks96

hauks96 OP

I know mock, but I don’t know how to mock a timezone database with it.

I don’t want to mock the functions I am calling, because I want to assert that the timezone conversions are taking place in the modules I am testing.

dimitarvp

dimitarvp

Intuitively, I’d say just inspect Elixir’s source and see which timezone functions it uses when a timezone database is supplied?

Here’s what Elixir itself does when ultimately it gets down to calling a function from the timezone module: elixir/lib/elixir/lib/calendar/datetime.ex at 1a1eda52b46e37b0c77835e374c16ec64bb5c638 · elixir-lang/elixir · GitHub

Basically it calls its time_zone_periods_from_wall_datetime/2 function (first argument is datetime, second argument is a timezone).

Another example in Elixir itself is how such a timezone database can be faked. Here: elixir/lib/elixir/test/elixir/calendar/fakes.exs at 1a1eda52b46e37b0c77835e374c16ec64bb5c638 · elixir-lang/elixir · GitHub

The link is to the above function but the entire module should be looked at.

You can combine that knowledge with either mock or patch so you have a local offline fake timezone database.

dimitarvp

dimitarvp

Just now saw your edit but it doesn’t change much. You can still make your mock respect timezone offsets.

Alternatively, I think you can just use a proper timezone database and instruct it to not do network requests.

tz has very configurable behaviour on when (or if?) to do automatic updates.

Here’s a link to the docs of tzdata that show you how to disable automatic updates.

hauks96

hauks96 OP

Thank you! I’ll take a look and share the results

LostKobrakai

LostKobrakai

Using past datetimes on non disputed regions should give you a rather stable timezone definition.

If you still need more control then you can use Mox with the time zone database behaviour and mock that.

— All posts loaded —

Where Next? Top

Trending in Questions Top

water
I’m aware of 2 such projects, are there others? git: GitHub - team-alembic/realworld: A fullstack Phoenix LiveView application with back...
New
katta
I having some trouble figuring out if I have set myself too strict of standards for my production server. Currently I can handle 75% of r...
New
peck
Hi everyone. My team and I have been working on a fairly modest app based around video streaming and chat, but we’ve landed a customer t...
New
bradley
I really like the adapter patterns that ecto, nebulex, waffle, etc. use and would love find something similar for a key management servic...
New
unaware8150
Hello folks! So at work, we are seeing some situations where we have to define some “fixed” strings that are used across the codebase in...
New
Alvinkariuki
How Can I Optimise Compile Time Dependencies I have been building an elixir application for about 2 years now. Many modules and files ha...
New

Other Trending Topics Top

budgie
A little off-topic, but I feel like people here have a good head on their shoulders. I used to be quite good at making software. Was luc...
New
KristerV
Hey. Is there anyone here who creates agents in their apps? Not talking about using agents, but creating them. I’m finding it pretty diff...
New
mudasobwa
I fully migrated to my own harness from Anthropic/Gemini and I think it’s time to share it. Welcome DSH, the DeepSeek Harness, fully writ...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
juhalehtonen
There has been a thread to discuss the Stack Overflow Developer Survey on this forum every year since 2018, so here’s yet another one for...
New
budgie
I love Elixir. It’s one of 2 programming languages I’ve ever fallen in love with. But I don’t use it anymore. Serverless was the promis...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews