Skip to content

Migration spec should run #down

Alex Pooley requested to merge apooley/migration-specs-are-broken into master

What does this MR do?

Migration specs are found in spec/migrations and are tagged with :migration and schema: 12345 metadata. Inside the example the developer performs a migrate! command to initiate the #up on the migration. In order to perform the #up the schema must first be downgraded through the #down as called by before(:context, :migration) and before(:each, :migration) hooks in spec/support/migration.rb.

Unfortunately the #down on the defined schema was never actually called. Before this MR the downgrade was performed as a downward migration process via migration_context.down(migration_schema_version). This down operation will reverse all migrations from the current version through to, but not including, the requested version. Here is the code where Rails skips the last schema downgrade.

  1. This MR will downgrade and upgrade only the schema defined in the schema metadata.
  2. This will not rollback all other migrations between the current schema version and itself.
  3. I have introduced a spec/fixtures/migrate directory to be included by migration specs for the purposes of testing the migration framework.

This could also represent a performance boost for database migrations. Especially specs for much earlier migrations that would have otherwise been forced to roll back a huge percentage of the schema.

Screenshots or Screencasts (strongly suggested)

How to setup and validate locally (strongly suggested)

Does this MR meet the acceptance criteria?

Conformity

Availability and Testing

Security

Does this MR contain changes to processing or storing of credentials or tokens, authorization and authentication methods or other items described in the security review guidelines? If not, then delete this Security section.

  • Label as security and @ mention @gitlab-com/gl-security/appsec
  • The MR includes necessary changes to maintain consistency between UI, API, email, or other methods
  • Security reports checked/validated by a reviewer from the AppSec team
Edited by Alex Pooley

Merge request reports