Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/controllers/api/form_documents_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ def show
render json: form_document.content
end

def group
render json: Form.find_by!(id: form_id).group
end

private

def form_document
Expand All @@ -17,4 +21,8 @@ def form_document_params

permitted_params
end

def form_id
params.require(:form_id)
end
end
10 changes: 10 additions & 0 deletions app/models/group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,19 @@ def to_param
external_id
end

def as_json(options = {})
options[:only] ||= %i[name external_id]
options[:methods] ||= %i[group_admin_users organisation]
super(options)
end

private

def set_external_id
self.external_id = ExternalIdProvider.generate_unique_id_for(Group)
end

def group_admin_users
users.group_admins
end
end
8 changes: 8 additions & 0 deletions app/models/organisation.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,12 @@ def name_with_abbreviation
def admin_users
users.organisation_admin
end

alias_method :organisation_admin_users, :admin_users

def as_json(options = {})
options[:only] ||= %i[id name]
options[:methods] ||= %i[organisation_admin_users]
super(options)
end
end
5 changes: 5 additions & 0 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,11 @@ def signed_in!
update!(last_signed_in_at: Time.zone.now)
end

def as_json(options = {})
options[:only] ||= %i[name email]
super(options)
end

private

def requires_name?
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,7 @@
scope "api/v2", as: "api_v2" do
scope "forms/:form_id" do
get "/:tag", to: "api/form_documents#show", as: :form_document, constraints: { tag: /draft|live|archived/ }
get "/group", to: "api/form_documents#group", as: :form_group
end
end

Expand Down
47 changes: 46 additions & 1 deletion spec/requests/api/form_documents_controller_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
RSpec.describe Api::FormDocumentsController, type: :request do
let(:headers) { { "ACCEPT": "application/json" } }

describe "GET /show" do
describe "#show" do
context "when the form exists" do
context "when the tag is draft" do
let(:draft_form_name) { "Draft form" }
Expand Down Expand Up @@ -151,6 +151,51 @@
end
end

describe "#group" do
context "when the form exists" do
let(:form) { create(:form) }
let(:group) { create(:group, organisation: test_org) }
let(:group_admin) { create(:user) }

before do
organisation_admin_user
create(:membership, user: group_admin, group:, role: :group_admin)
create(:membership, user: create(:user), group:, role: :editor)

group.group_forms.create!(form_id: form.id)
end

it "returns the group" do
get("/api/v2/forms/#{form.id}/group", headers:)

expect(response).to have_http_status(:success)
expect(response.parsed_body).to eq({
"external_id" => group.external_id,
"name" => group.name,
"group_admin_users" => [
{ "name" => group_admin.name, "email" => group_admin.email },
],
"organisation" => {
"id" => test_org.id,
"name" => test_org.name,
"organisation_admin_users" => [
{ "name" => organisation_admin_user.name, "email" => organisation_admin_user.email },
],
},
})
end
end

context "when the form doesn't exist" do
it "returns http not found" do
get("/api/v2/forms/non-existent/group", headers:)

expect(response).to have_http_status(:not_found)
expect(response.headers["Content-Type"]).to eq("application/json; charset=utf-8")
end
end
end

describe "logging", :capture_logging do
let(:trace_id) { "Root=1-63441c4a-abcdef012345678912345678" }
let(:request_id) { "a-request-id" }
Expand Down