-
-
Notifications
You must be signed in to change notification settings - Fork 160
Description
Description
When I run dotnet test on my machine with the docker image, I get about 167 errors. Today I investigated what is going on and traced down the cause of this. For reasons unknown to me, the tests in NoEntityFrameworkTests execute prior to most other tests that use entity framework.
NoEntityFrameworkTests creates a table named TodoItems in PostgreSQL with 9 columns, based on class NoEntityFrameworkExample.Models.TodoItem. This causes test Can_Create_TodoItems to fail with message:
{"errors":[{"title":"PostgresException","detail":"23502: null value in column \"CreatedDate\" violates not-null constraint","status":"500"}]}
which makes sense because the column is non-nullable, the test specifies no value and NoEntityFrameworkExample.Data.AppDbContext has no OnModelCreating method that specifies a default column value (like JsonApiDotNetCoreExample.Data.AppDbContext does).
I found that deleting the database and manually running a single test that uses JsonApiDotNetCoreExample.Data.AppDbContext (for example: JsonApiDotNetCoreExampleTests.Acceptance.HttpReadOnlyTests.Allows_GET_Requests) fixes all failing tests. It creates the 15 columns from JsonApiDotNetCoreExample.Models.TodoItem in PostgreSQL, which happen to not conflict with the 9 columns needed by NoEntityFrameworkTests. As a side effect, the non-nullable CreatedDate now has a default value in the database, which makes test Can_Create_TodoItems succeed as well.
So to summarize, the issue is caused by two different versions of TodoItem which are stored in the exact same database location, combined with non-deterministic ordering of test execution.
I think the fix may be as simple as moving them into different schemas, combined with passing a CreatedDate value in test Can_Create_TodoItems.
Environment
Latest master branch