Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: restore support url as an object in configuration #1119

Merged
merged 4 commits into from Apr 29, 2024

Conversation

jraoult
Copy link
Contributor

@jraoult jraoult commented Apr 25, 2024

This PR fixes a regression introduced in v7.0.0 where it was not possible to use the defined configured url as an object anymore (cf. https://salsita.github.io/node-pg-migrate/#/cli?id=json-configuration).

For reference, it typically looks like that:

{
  "url": {
    "connectionString": "postgres://postgres:password@localhost:5432/postgres",
    "ssl": false
  }
}

This was caused by a lack of unit testing around this behaviour, so I introduced a spec for the CLI to cover this case. I never had to write tests for CLIs @Shinigami92, so I had to improvise a little. I think it is a good base to extend the CLI tests if you ever want to. Let me know what you think.

Closes #1112

@jraoult jraoult changed the title Restore support url as an object in cofniguration fix: restore support url as an object in cofniguration Apr 25, 2024
@jraoult jraoult changed the title fix: restore support url as an object in cofniguration fix: restore support url as an object in configuration Apr 25, 2024
@Shinigami92 Shinigami92 added c: bug Something isn't working p: 1-normal Nothing urgent labels Apr 25, 2024
@Shinigami92 Shinigami92 added this to the v7.x milestone Apr 25, 2024
@Shinigami92
Copy link
Collaborator

Uhm... this might be nice what you had done with execa, but maybe we should do this in it's separate PR 🤔 so we dont introduce a fully new integration-test strategy

Instead you should just add one test-job to https://github.com/salsita/node-pg-migrate/blob/main/.github/workflows/postgres-test.yml like

name: 'Config Test: pg-${{ matrix.postgres_version }}, node-${{ matrix.node_version }}, ubuntu-latest'
steps:
- name: Checkout
uses: actions/checkout@1d96c772d19495a3b5c517cd2bc0cb401ea0529f # v4.1.3
- name: Install pnpm
uses: pnpm/action-setup@a3252b78c470c02df07e9d59298aecedc3ccdd6d # v3.0.0
- name: Set node version to ${{ matrix.node_version }}
uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2
with:
node-version: ${{ matrix.node_version }}
cache: 'pnpm'
- name: Install deps
run: pnpm install
- name: Build
run: pnpm run build
- name: Write config
run: |
mkdir -p config
cat > config/default.json << 'EOF'
{
"db": {
"user": "ubuntu",
"password": "ubuntu",
"host": "localhost",
"port": "5432",
"database": "integration_test"
}
}
EOF
- name: Integration Test
run: pnpm run migrate up -m test/migrations && pnpm run migrate down 0 -m test/migrations --timestamps

@jraoult
Copy link
Contributor Author

jraoult commented Apr 26, 2024

Instead you should just add one test-job

@Shinigami92 Hmm fair enough. I missed that. Let me see if I can hack that today, but it might be tight. Otherwise, I'll take care of it next week.

@jraoult
Copy link
Contributor Author

jraoult commented Apr 29, 2024

just add one test-job

@Shinigami92, back at it. So, do you want a complete job or to add steps to the existing one? My instinct was to just add two steps, like "Write alternative config" and then "Integration Test for alternate config" since it would save execution time (no need to reinstall and rebuild).

Also, did you mean to run a full migration test (ie. pnpm run migrate up and pnpm run migrate down) or a dry run as I did with execa just to test the config "parsing"?

@Shinigami92
Copy link
Collaborator

@Shinigami92, back at it. So, do you want a complete job or to add steps to the existing one? My instinct was to just add two steps, like "Write alternative config" and then "Integration Test for alternate config" since it would save execution time (no need to reinstall and rebuild).

complete job / copy of "Config Test"

Also, did you mean to run a full migration test (ie. pnpm run migrate up and pnpm run migrate down) or a dry run as I did with execa just to test the config "parsing"?

it's ok to do a full/real migration like "Config Test"
just make a copy of it, rename it to in worst-case Config Test 2 and change the "Write config" step

@jraoult jraoult force-pushed the fix/1112-support-url-as-an-object branch from 5dd247a to 80f6ac2 Compare April 29, 2024 13:03
@jraoult
Copy link
Contributor Author

jraoult commented Apr 29, 2024

@Shinigami92 done 👍

Copy link

github-actions bot commented Apr 29, 2024

Coverage Report

Status Category Percentage Covered / Total
🟢 Lines 95.59% (🎯 90%)
🟰 ±0%
6746 / 7057
🟢 Statements 95.59% (🎯 90%)
🟰 ±0%
6746 / 7057
🟢 Functions 95.4% (🎯 90%)
🟰 ±0%
249 / 261
🟢 Branches 89.88% (🎯 85%)
🟰 ±0%
800 / 890
File Coverage
File Stmts % Branch % Funcs % Lines Uncovered Lines
Unchanged Files
src/db.ts 87.95% 88.46% 87.5% 87.95% 66-68, 98, 101-113, 153-155
src/index.ts 100% 100% 100% 100%
src/migration.ts 75.32% 78.04% 58.33% 75.32% 63, 66-68, 70-82, 111-117, 122-158, 215-216, 241-244, 252-253, 270-273, 302-303
src/migrationBuilder.ts 97.56% 92.3% 87.5% 97.56% 354-358, 497-502, 526-527
src/runner.ts 74.22% 58.92% 80% 74.22% 41, 69-70, 79-80, 83-91, 129-130, 172-175, 184-188, 201, 205-218, 237, 239-245, 248, 261, 273-286, 289-292, 302-303, 312-314, 323, 325-334, 346-353
src/sqlMigration.ts 90.19% 100% 80% 90.19% 45-49
src/types.ts 100% 100% 100% 100%
src/operations/sql.ts 100% 100% 100% 100%
src/operations/casts/createCast.ts 100% 100% 100% 100%
src/operations/casts/dropCast.ts 100% 100% 100% 100%
src/operations/casts/index.ts 100% 100% 100% 100%
src/operations/domains/alterDomain.ts 100% 100% 100% 100%
src/operations/domains/createDomain.ts 100% 100% 100% 100%
src/operations/domains/dropDomain.ts 100% 100% 100% 100%
src/operations/domains/index.ts 100% 100% 100% 100%
src/operations/domains/renameDomain.ts 100% 100% 100% 100%
src/operations/domains/shared.ts 100% 100% 100% 100%
src/operations/extensions/createExtension.ts 100% 100% 100% 100%
src/operations/extensions/dropExtension.ts 100% 100% 100% 100%
src/operations/extensions/index.ts 100% 100% 100% 100%
src/operations/extensions/shared.ts 100% 100% 100% 100%
src/operations/functions/createFunction.ts 100% 100% 100% 100%
src/operations/functions/dropFunction.ts 100% 100% 100% 100%
src/operations/functions/index.ts 100% 100% 100% 100%
src/operations/functions/renameFunction.ts 100% 100% 100% 100%
src/operations/functions/shared.ts 100% 100% 100% 100%
src/operations/grants/grantOnSchemas.ts 100% 100% 100% 100%
src/operations/grants/grantOnTables.ts 100% 100% 100% 100%
src/operations/grants/grantRoles.ts 100% 100% 100% 100%
src/operations/grants/index.ts 100% 100% 100% 100%
src/operations/grants/revokeOnSchemas.ts 100% 100% 100% 100%
src/operations/grants/revokeOnTables.ts 100% 100% 100% 100%
src/operations/grants/revokeRoles.ts 100% 100% 100% 100%
src/operations/grants/shared.ts 98.63% 85.71% 100% 98.63% 71
src/operations/indexes/createIndex.ts 98.03% 95.23% 100% 98.03% 74-75
src/operations/indexes/dropIndex.ts 100% 100% 100% 100%
src/operations/indexes/index.ts 100% 100% 100% 100%
src/operations/indexes/shared.ts 91.17% 86.95% 100% 91.17% 22, 32-35, 47
src/operations/materializedViews/alterMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/createMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/dropMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/index.ts 100% 100% 100% 100%
src/operations/materializedViews/refreshMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/renameMaterializedView.ts 100% 100% 100% 100%
src/operations/materializedViews/renameMaterializedViewColumn.ts 100% 100% 100% 100%
src/operations/materializedViews/shared.ts 100% 87.5% 100% 100%
src/operations/operators/addToOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/createOperator.ts 100% 100% 100% 100%
src/operations/operators/createOperatorClass.ts 100% 83.33% 100% 100%
src/operations/operators/createOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/dropOperator.ts 100% 100% 100% 100%
src/operations/operators/dropOperatorClass.ts 100% 100% 100% 100%
src/operations/operators/dropOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/index.ts 100% 100% 100% 100%
src/operations/operators/removeFromOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/renameOperatorClass.ts 100% 100% 100% 100%
src/operations/operators/renameOperatorFamily.ts 100% 100% 100% 100%
src/operations/operators/shared.ts 90% 75% 100% 90% 24-25, 37-38
src/operations/policies/alterPolicy.ts 100% 100% 100% 100%
src/operations/policies/createPolicy.ts 100% 100% 100% 100%
src/operations/policies/dropPolicy.ts 100% 100% 100% 100%
src/operations/policies/index.ts 100% 100% 100% 100%
src/operations/policies/renamePolicy.ts 100% 100% 100% 100%
src/operations/policies/shared.ts 100% 100% 100% 100%
src/operations/roles/alterRole.ts 100% 100% 100% 100%
src/operations/roles/createRole.ts 100% 75% 100% 100%
src/operations/roles/dropRole.ts 100% 100% 100% 100%
src/operations/roles/index.ts 100% 100% 100% 100%
src/operations/roles/renameRole.ts 100% 100% 100% 100%
src/operations/roles/shared.ts 98.97% 76.92% 100% 98.97% 78
src/operations/schemas/createSchema.ts 100% 100% 100% 100%
src/operations/schemas/dropSchema.ts 100% 100% 100% 100%
src/operations/schemas/index.ts 100% 100% 100% 100%
src/operations/schemas/renameSchema.ts 100% 100% 100% 100%
src/operations/sequences/alterSequence.ts 96.87% 75% 100% 96.87% 23
src/operations/sequences/createSequence.ts 100% 100% 100% 100%
src/operations/sequences/dropSequence.ts 100% 100% 100% 100%
src/operations/sequences/index.ts 100% 100% 100% 100%
src/operations/sequences/renameSequence.ts 100% 100% 100% 100%
src/operations/sequences/shared.ts 87.67% 68.75% 100% 87.67% 41, 43-44, 49-50, 63-64, 69-70
src/operations/tables/addColumns.ts 100% 80% 100% 100%
src/operations/tables/addConstraint.ts 100% 100% 100% 100%
src/operations/tables/alterColumn.ts 92.5% 76.47% 100% 92.5% 75, 82-89
src/operations/tables/alterTable.ts 100% 100% 100% 100%
src/operations/tables/createTable.ts 90.47% 66.66% 100% 90.47% 44-48, 65, 75-76
src/operations/tables/dropColumns.ts 100% 100% 100% 100%
src/operations/tables/dropConstraint.ts 100% 100% 100% 100%
src/operations/tables/dropTable.ts 100% 100% 100% 100%
src/operations/tables/index.ts 100% 100% 100% 100%
src/operations/tables/renameColumn.ts 100% 100% 100% 100%
src/operations/tables/renameConstraint.ts 100% 100% 100% 100%
src/operations/tables/renameTable.ts 100% 100% 100% 100%
src/operations/tables/shared.ts 88.47% 78.46% 80% 88.47% 137-138, 141-142, 195-199, 224, 228-229, 248-249, 274-275, 278-285, 288-289, 426-451
src/operations/triggers/createTrigger.ts 90.83% 68.18% 100% 90.83% 53-54, 66-67, 70-71, 74-77, 113
src/operations/triggers/dropTrigger.ts 100% 100% 100% 100%
src/operations/triggers/index.ts 100% 100% 100% 100%
src/operations/triggers/renameTrigger.ts 100% 100% 100% 100%
src/operations/triggers/shared.ts 100% 100% 100% 100%
src/operations/types/addTypeAttribute.ts 100% 100% 100% 100%
src/operations/types/addTypeValue.ts 100% 100% 100% 100%
src/operations/types/createType.ts 100% 100% 100% 100%
src/operations/types/dropType.ts 100% 100% 100% 100%
src/operations/types/dropTypeAttribute.ts 100% 100% 100% 100%
src/operations/types/index.ts 100% 100% 100% 100%
src/operations/types/renameType.ts 100% 100% 100% 100%
src/operations/types/renameTypeAttribute.ts 100% 100% 100% 100%
src/operations/types/renameTypeValue.ts 100% 100% 100% 100%
src/operations/types/setTypeAttribute.ts 100% 100% 100% 100%
src/operations/views/alterView.ts 100% 100% 100% 100%
src/operations/views/alterViewColumn.ts 100% 100% 100% 100%
src/operations/views/createView.ts 100% 100% 100% 100%
src/operations/views/dropView.ts 100% 100% 100% 100%
src/operations/views/index.ts 100% 100% 100% 100%
src/operations/views/renameView.ts 100% 100% 100% 100%
src/operations/views/shared.ts 100% 66.66% 100% 100%
src/utils/PgLiteral.ts 96.49% 100% 66.66% 96.49% 37-38
src/utils/StringIdGenerator.ts 100% 100% 100% 100%
src/utils/createSchemalize.ts 100% 100% 100% 100%
src/utils/createTransformer.ts 100% 100% 100% 100%
src/utils/decamelize.ts 100% 100% 100% 100%
src/utils/escapeValue.ts 100% 100% 100% 100%
src/utils/formatLines.ts 100% 100% 100% 100%
src/utils/formatParams.ts 100% 100% 100% 100%
src/utils/getMigrationTableSchema.ts 100% 100% 100% 100%
src/utils/getSchemas.ts 100% 100% 100% 100%
src/utils/identity.ts 100% 100% 100% 100%
src/utils/index.ts 100% 100% 100% 100%
src/utils/intersection.ts 100% 100% 100% 100%
src/utils/makeComment.ts 100% 100% 100% 100%
src/utils/quote.ts 100% 100% 100% 100%
src/utils/toArray.ts 100% 100% 100% 100%
src/utils/types.ts 100% 100% 100% 100%
Generated in workflow #710

@Shinigami92
Copy link
Collaborator

You could name these like "Config 1 Test" and "Config 2 Test", because we already have something similar with "Password 1 Test" and "Password 2 Test"

@Shinigami92
Copy link
Collaborator

🎉 thx for your contribution 🙏
I will release this potentially as v7.2.1 today or tomorrow

@Shinigami92 Shinigami92 merged commit b9cf8e9 into salsita:main Apr 29, 2024
33 checks passed
@Shinigami92
Copy link
Collaborator

v7.2.1 released

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c: bug Something isn't working p: 1-normal Nothing urgent
Projects
None yet
Development

Successfully merging this pull request may close these issues.

JSON configuration doesn't not support url as an object anymore
2 participants