Skip to content

Fixture relative path #3852

Open
Open
@sinder38

Description

@sinder38

I have found these related issues/pull requests

This in a way continues this PR:
#2545

Description

fixtures test gets relative file from the file position instead of module. This not a bug since docs mention it, but I really don't like it.

This happens because sqlx-macros uses include_str!() to get file contents.

contents: include_str!(#path),

Reproduction:

lib-core/
├── db/
│   └── migrations/
│   └── fixtures/
│     └── seed_test.sql
└── src/
    └── model/
        └── good/
            └── good_type.rs

Both of these will cause an error

#[sqlx::test(
	migrations = "./db/migrations",
	fixtures(path = "./db/fixtures", scripts("seed_test"))
)]
async fn test_list_interface(pool: Db) -> Result<()> {todo!()}

#[sqlx::test(
	migrations = "./db/migrations",
	fixtures(path = "./db/fixtures", scripts("seed_test"))
)]
async fn test_list_interface(pool: Db) -> Result<()> {todo!()}

These will work... but are very awkward

	#[sqlx::test(
		migrations = "./db/migrations",
		fixtures("../../../db/fixtures/seed_test.sql")
	)]
	async fn test_list_full(pool: Db) -> Result<()> {


	#[sqlx::test(
		migrations = "./db/migrations",
		fixtures(path = "../../../db/fixtures", scripts("seed_test"))
	)]
	async fn test_list_interface(pool: Db) -> Result<()> {

Prefered solution

Option 1
I think in case of relative positions there should be 2 ways to specify a path, both from the file position and module position.

	#[sqlx::test(
		migrations = "./db/migrations",
		fixtures(module_path = "./db/fixtures", scripts("seed_test"))
	)]

Option 2
allow to specify fixture and migration directories in env would be a dream. If it is specified all tests start path from it unless overridden. This does not introduce any new syntax.

Is this a breaking change? Why or why not?

This is not a breaking change since path="to/your/test.sql" functionality is not touched.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions