Skip to content

Commit 5f6b838

Browse files
authored
Merge pull request #20 from alphagov/database-column-changes-agnostic-api
Update database to match new agnostic api payload
2 parents 2e1f4ed + 47a09fd commit 5f6b838

File tree

5 files changed

+53
-46
lines changed

5 files changed

+53
-46
lines changed

app/models/request.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ class Request < ApplicationRecord
33
has_many :users, through: :collaborations
44
has_one :response
55

6-
validates :edition_id, :requester_name, :requester_email, :status, :current_content, :deadline, presence: true
7-
scope :for_edition, ->(edition_id) { where(edition_id: edition_id) }
6+
validates :source_id, :source_app, :requester_name, :requester_email, :status, :current_content, presence: true
7+
scope :for_source, ->(source_id) { where(source_id: source_id) }
88
scope :most_recent_first, -> { order(created_at: :desc) }
9-
scope :most_recent_for_edition, ->(edition_id) { for_edition(edition_id).most_recent_first.first }
9+
scope :most_recent_for_source, ->(source_id) { for_source(source_id).most_recent_first.first }
1010
end

db/migrate/20260107162918_create_requests.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@ def change
33
# Bigint ID column is added by default
44
create_table :requests do |t|
55
enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
6-
t.uuid :edition_id, index: true, null: false
6+
t.uuid :source_id, index: true, null: false
7+
t.string :source_app, null: false
8+
t.string :source_url
9+
t.string :source_title
710
t.string :requester_name, null: false
811
t.string :requester_email, null: false
912
t.string :status, null: false, default: 'in_progress'
10-
t.text :previous_published_edition
13+
t.text :previous_content
1114
t.text :current_content, null: false
12-
t.datetime :deadline, null: false
15+
t.datetime :deadline
1316

1417
t.timestamps
1518
end

db/schema.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema[8.0].define(version: 2026_01_21_152056) do
13+
ActiveRecord::Schema[8.0].define(version: 2026_02_04_143415) do
1414
# These are extensions that must be enabled in order to support this database
1515
enable_extension "pg_catalog.plpgsql"
1616
enable_extension "pgcrypto"
@@ -27,17 +27,20 @@
2727
end
2828

2929
create_table "requests", force: :cascade do |t|
30-
t.uuid "edition_id", null: false
30+
t.uuid "source_id", null: false
3131
t.string "requester_name", null: false
3232
t.string "requester_email", null: false
3333
t.string "status", default: "in_progress", null: false
34-
t.text "previous_published_edition"
34+
t.text "previous_content"
3535
t.text "current_content", null: false
36-
t.datetime "deadline", null: false
36+
t.datetime "deadline"
3737
t.datetime "created_at", null: false
3838
t.datetime "updated_at", null: false
39+
t.string "source_app", null: false
40+
t.string "source_url"
41+
t.string "source_title"
3942
t.index ["created_at"], name: "index_requests_on_created_at"
40-
t.index ["edition_id"], name: "index_requests_on_edition_id"
43+
t.index ["source_id"], name: "index_requests_on_source_id"
4144
end
4245

4346
create_table "responses", force: :cascade do |t|

spec/factories/request.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
FactoryBot.define do
22
factory :request do
3-
edition_id { SecureRandom.uuid }
3+
source_id { SecureRandom.uuid }
4+
source_app { "publisher" }
45
requester_name { "Malcolm Tucker" }
56
requester_email { "m.tucker@gov.uk" }
67
current_content { "<HTML> Changes go here <HTML>" }

spec/models/request_spec.rb

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
expect(record).not_to be_valid
88
end
99

10-
it "includes errors for each missing attribute" do
10+
it "includes errors for each missing mandatory attribute" do
1111
record = described_class.new
1212
record.valid?
1313

14-
expect(record.errors.attribute_names).to include(:edition_id, :requester_name, :requester_email, :current_content, :deadline)
14+
expect(record.errors.attribute_names).to include(:source_id, :source_app, :requester_name, :requester_email, :current_content)
1515
end
1616

1717
it "is valid when all required attributes are set" do
@@ -20,14 +20,14 @@
2020
expect(record).to be_valid
2121
end
2222

23-
describe "searching by edition_id" do
24-
it "can save and retrieve multiple requests that share the same edition_id" do
23+
describe "searching by source_id" do
24+
it "can save and retrieve multiple requests that share the same source_id" do
2525
shared_uuid = "a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"
26-
request_1 = create(:request, edition_id: shared_uuid, requester_email: "alice@gov.uk")
27-
request_2 = create(:request, edition_id: shared_uuid, requester_email: "bob@gov.uk")
28-
other_request = create(:request, edition_id: SecureRandom.uuid)
26+
request_1 = create(:request, source_id: shared_uuid, requester_email: "alice@gov.uk")
27+
request_2 = create(:request, source_id: shared_uuid, requester_email: "bob@gov.uk")
28+
other_request = create(:request, source_id: SecureRandom.uuid)
2929

30-
results = Request.where(edition_id: shared_uuid)
30+
results = Request.where(source_id: shared_uuid)
3131

3232
expect(results).to include(request_1, request_2)
3333
expect(results).not_to include(other_request)
@@ -47,51 +47,51 @@
4747
end
4848

4949
context "scopes" do
50-
describe ".for_edition" do
51-
it "returns only requests matching the given edition id" do
52-
edition_id = SecureRandom.uuid
53-
edition_request = FactoryBot.create(:request, edition_id: edition_id)
54-
other_edition_request = FactoryBot.create(:request)
50+
describe ".for_source" do
51+
it "returns only requests matching the given source id" do
52+
source_id = SecureRandom.uuid
53+
source_request = FactoryBot.create(:request, source_id: source_id)
54+
other_source_request = FactoryBot.create(:request)
5555

56-
requests = Request.for_edition(edition_id)
56+
requests = Request.for_source(source_id)
5757

58-
expect(requests).to include(edition_request)
59-
expect(requests).not_to include(other_edition_request)
58+
expect(requests).to include(source_request)
59+
expect(requests).not_to include(other_source_request)
6060
end
6161
end
6262

6363
describe ".most_recent_first" do
6464
it "returns requests in descending order of created_at" do
65-
edition_id = SecureRandom.uuid
66-
older_request = FactoryBot.create(:request, edition_id: edition_id, created_at: Time.zone.now - 2.hours)
67-
newer_request = FactoryBot.create(:request, edition_id: edition_id, created_at: Time.zone.now)
65+
source_id = SecureRandom.uuid
66+
older_request = FactoryBot.create(:request, source_id: source_id, created_at: Time.zone.now - 2.hours)
67+
newer_request = FactoryBot.create(:request, source_id: source_id, created_at: Time.zone.now)
6868

6969
requests = Request.most_recent_first
7070

7171
expect(requests).to eq([newer_request, older_request])
7272
end
7373

74-
it "combines with .for_edition to return edition requests in descending order" do
75-
edition_id = SecureRandom.uuid
76-
older_request_for_edition = FactoryBot.create(:request, edition_id: edition_id, created_at: Time.zone.now - 2.hours)
77-
newer_request_for_edition = FactoryBot.create(:request, edition_id: edition_id, created_at: Time.zone.now)
78-
older_request_other_edition = FactoryBot.create(:request, created_at: Time.zone.now - 2.days)
79-
newer_request_other_edition = FactoryBot.create(:request, created_at: Time.zone.now)
74+
it "combines with .for_source to return source requests in descending order" do
75+
source_id = SecureRandom.uuid
76+
older_request_for_source = FactoryBot.create(:request, source_id: source_id, created_at: Time.zone.now - 2.hours)
77+
newer_request_for_source = FactoryBot.create(:request, source_id: source_id, created_at: Time.zone.now)
78+
older_request_other_source = FactoryBot.create(:request, created_at: Time.zone.now - 2.days)
79+
newer_request_other_source = FactoryBot.create(:request, created_at: Time.zone.now)
8080

81-
requests = Request.for_edition(edition_id).most_recent_first
81+
requests = Request.for_source(source_id).most_recent_first
8282

83-
expect(requests).to eq([newer_request_for_edition, older_request_for_edition])
84-
expect(requests).not_to include(older_request_other_edition, newer_request_other_edition)
83+
expect(requests).to eq([newer_request_for_source, older_request_for_source])
84+
expect(requests).not_to include(older_request_other_source, newer_request_other_source)
8585
end
8686
end
8787

88-
describe ".most_recent_for_edition" do
89-
it "returns the most recent request for the given edition ID" do
90-
edition_id = SecureRandom.uuid
91-
_older_request = FactoryBot.create(:request, edition_id: edition_id, created_at: Time.zone.now - 2.hours)
92-
newer_request = FactoryBot.create(:request, edition_id: edition_id, created_at: Time.zone.now)
88+
describe ".most_recent_for_source" do
89+
it "returns the most recent request for the given source ID" do
90+
source_id = SecureRandom.uuid
91+
_older_request = FactoryBot.create(:request, source_id: source_id, created_at: Time.zone.now - 2.hours)
92+
newer_request = FactoryBot.create(:request, source_id: source_id, created_at: Time.zone.now)
9393

94-
request = Request.most_recent_for_edition(edition_id)
94+
request = Request.most_recent_for_source source_id
9595

9696
expect(request).to eq(newer_request)
9797
end

0 commit comments

Comments
 (0)