summaryrefslogtreecommitdiff
path: root/spec/migrations/backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps_spec.rb
blob: 22c93d378168f2ce938e4600d9fd1f5d0d0e6bbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# frozen_string_literal: true

require 'spec_helper'
require Rails.root.join('db', 'migrate', '20190920194925_backfill_releases_table_updated_at_and_add_not_null_constraints_to_timestamps.rb')

RSpec.describe BackfillReleasesTableUpdatedAtAndAddNotNullConstraintsToTimestamps do
  let(:releases)   { table(:releases) }
  let(:namespaces) { table(:namespaces) }
  let(:projects)   { table(:projects) }

  subject(:migration) { described_class.new }

  it 'fills null updated_at rows with the value of created_at' do
    created_at_a = Time.zone.parse('2014-03-11T04:30:00Z')
    created_at_b = Time.zone.parse('2019-09-10T12:00:00Z')
    namespace = namespaces.create!(name: 'foo', path: 'foo')
    project = projects.create!(namespace_id: namespace.id)
    release_a = releases.create!(project_id: project.id,
                                 released_at: Time.zone.parse('2014-12-10T06:00:00Z'),
                                 created_at: created_at_a)
    release_b = releases.create!(project_id: project.id,
                                 released_at: Time.zone.parse('2019-09-11T06:00:00Z'),
                                 created_at: created_at_b)
    release_a.update!(updated_at: nil)
    release_b.update!(updated_at: nil)

    disable_migrations_output { migrate! }

    release_a.reload
    release_b.reload
    expect(release_a.updated_at).to eq(created_at_a)
    expect(release_b.updated_at).to eq(created_at_b)
  end

  it 'does not change updated_at columns with a value' do
    created_at_a = Time.zone.parse('2014-03-11T04:30:00Z')
    updated_at_a = Time.zone.parse('2015-01-16T10:00:00Z')
    created_at_b = Time.zone.parse('2019-09-10T12:00:00Z')
    namespace = namespaces.create!(name: 'foo', path: 'foo')
    project = projects.create!(namespace_id: namespace.id)
    release_a = releases.create!(project_id: project.id,
                                 released_at: Time.zone.parse('2014-12-10T06:00:00Z'),
                                 created_at: created_at_a,
                                 updated_at: updated_at_a)
    release_b = releases.create!(project_id: project.id,
                                 released_at: Time.zone.parse('2019-09-11T06:00:00Z'),
                                 created_at: created_at_b)
    release_b.update!(updated_at: nil)

    disable_migrations_output { migrate! }

    release_a.reload
    release_b.reload
    expect(release_a.updated_at).to eq(updated_at_a)
    expect(release_b.updated_at).to eq(created_at_b)
  end
end