I recently upgraded a project from Ecto 2~ to Ecto 3. I was able to get all tests passing locally, there were a few instances were tests were failing due to microsecond precision so I added @trimestamps_opts [type: :utc_datetime_usec]
and everything worked.
However, when I run tests in Docker (via Bitbucket pipelines) I get this error:
1) test list/0 returns all vendors .../vendors/vendors_test.exs:36
Assertion with == failed
code: assert expected == [actual]
left: [
%Vendor{
__meta__: #Ecto.Schema.Metadata<:loaded, "vendors">,
cut_off_time: ~T[12:00:00],
email: nil,
holidays: [],
id: 3,
inserted_at: ~N[2022-11-10 00:30:35.000000],
key: "Vendor 3",
lead_time: 2,
name: "Vendor 11",
timezone: "US/Eastern",
updated_at: ~N[2022-11-10 00:30:35.000000]
}
]
right: [
%Vendor{
__meta__: #Ecto.Schema.Metadata<:loaded, "vendors">,
cut_off_time: ~T[12:00:00],
email: nil,
holidays: [],
id: 3,
inserted_at: ~N[2022-11-10 00:30:34.544646],
key: "Vendor 3",
lead_time: 2,
name: "Vendor 11",
timezone: "US/Eastern",
updated_at: ~N[2022-11-10 00:30:34.544646]
}
]
stacktrace:
...vendors/vendors_test.exs:39: (test)
This is the particular test in question:
test "list/0 returns all vendors" do
actual = insert(:vendor)
expected = Vendors.list()
assert expected == [actual]
end
To me, this looks as if ExMachina is creating a vendor
with a datetime utc_datetime_usec
that respects microseconds, but it is not being persisted into the database as such? Again, this test gives me no trouble locally it’s only when the test runs via Docker while deploying.