diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b7919f35..fcb04cfad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Changelog Fab-manager +- Extended OpenAPI endpoint to list events - Fix a bug: members can't change/cancel their reservations - Fix a bug: admin events view should default to the list tab - Fix a bug: event creation form should not allow setting multiple times the same price category diff --git a/app/doc/open_api/v1/events_doc.rb b/app/doc/open_api/v1/events_doc.rb index 7fd90c778..dc1a5262b 100644 --- a/app/doc/open_api/v1/events_doc.rb +++ b/app/doc/open_api/v1/events_doc.rb @@ -29,12 +29,21 @@ class OpenAPI::V1::EventsDoc < OpenAPI::V1::BaseDoc "created_at": "2016-04-25T10:49:40.055+02:00", "nb_total_places": 18, "nb_free_places": 16, + "start_at": "2016-05-02T18:00:00.000+02:00", + "end_at": "2016-05-02T22:00:00.000+02:00", + "category": "Openlab", + "event_image": { + "large_url": "https://example.com/uploads/event_image/3454/large_event_image.jpg", + "medium_url": "https://example.com/uploads/event_image/3454/medium_event_image.jpg", + "small_url": "https://example.com/uploads/event_image/3454/small_event_image.jpg" + }, "prices": { "normal": { "name": "Plein tarif", "amount": 0 } - } + }, + "url": "https://example.com/#!/events/183" }, { "id": 182, @@ -44,6 +53,19 @@ class OpenAPI::V1::EventsDoc < OpenAPI::V1::BaseDoc "created_at": "2016-04-11T17:40:15.146+02:00", "nb_total_places": 8, "nb_free_places": 0, + "start_at": "2016-05-02T18:00:00.000+01:00", + "end_at": "2026-05-02T22:00:00.000+01:00", + "category": "Atelier", + "themes": [ + "DIY", + "Sport" + ], + "age_range": "14 - 18 ans", + "event_image": { + "large_url": "https://example.com/uploads/event_image/3453/large_event_image.jpg", + "medium_url": "https://example.com/uploads/event_image/3453/medium_event_image.jpg", + "small_url": "https://example.com/uploads/event_image/3453/small_event_image.jpg" + }, "prices": { "normal": { "name": "Plein tarif", @@ -53,7 +75,8 @@ class OpenAPI::V1::EventsDoc < OpenAPI::V1::BaseDoc "name": "Tarif réduit", "amount": 4000 }, - } + }, + "url": "https://example.com/#!/events/182" } ] } diff --git a/app/views/open_api/v1/events/_event.json.jbuilder b/app/views/open_api/v1/events/_event.json.jbuilder index e49ab2747..1a66dc29f 100644 --- a/app/views/open_api/v1/events/_event.json.jbuilder +++ b/app/views/open_api/v1/events/_event.json.jbuilder @@ -1 +1,3 @@ +# frozen_string_literal: true + json.extract! event, :id, :title, :description, :updated_at, :created_at diff --git a/app/views/open_api/v1/events/index.json.jbuilder b/app/views/open_api/v1/events/index.json.jbuilder index 12f7ea1a2..826ab1641 100644 --- a/app/views/open_api/v1/events/index.json.jbuilder +++ b/app/views/open_api/v1/events/index.json.jbuilder @@ -1,8 +1,13 @@ +# frozen_string_literal: true + json.events @events do |event| json.partial! 'open_api/v1/events/event', event: event json.extract! event, :nb_total_places, :nb_free_places json.start_at event.availability.start_at json.end_at event.availability.end_at + json.category event.category.name + json.themes event.event_themes&.map(&:name) + json.age_range event.age_range&.name if event.event_image json.event_image do json.large_url root_url.chomp('/') + event.event_image.attachment.large.url @@ -23,4 +28,5 @@ json.events @events do |event| end end end + json.url URI.join("#{ENV.fetch('DEFAULT_PROTOCOL')}://#{ENV.fetch('DEFAULT_HOST')}", "/#!/events/#{event.id}") end diff --git a/test/integration/open_api/events_test.rb b/test/integration/open_api/events_test.rb index d723449f2..d8cfd2d55 100644 --- a/test/integration/open_api/events_test.rb +++ b/test/integration/open_api/events_test.rb @@ -12,6 +12,21 @@ class OpenApi::EventsTest < ActionDispatch::IntegrationTest test 'list all events' do get '/open_api/v1/events', headers: open_api_headers(@token) assert_response :success + events = json_response(response.body) + assert_not_empty events[:events] + + assert(events[:events].all? { |event| !event[:id].nil? }) + assert(events[:events].all? { |event| !event[:title].nil? }) + assert(events[:events].all? { |event| !event[:description].nil? }) + assert(events[:events].all? { |event| !event[:updated_at].nil? }) + assert(events[:events].all? { |event| !event[:created_at].nil? }) + assert(events[:events].all? { |event| !event[:nb_total_places].nil? }) + assert(events[:events].all? { |event| !event[:nb_free_places].nil? }) + assert(events[:events].all? { |event| !event[:start_at].nil? }) + assert(events[:events].all? { |event| !event[:end_at].nil? }) + assert(events[:events].all? { |event| !event[:category].nil? }) + assert(events[:events].all? { |event| !event[:prices][:normal].nil? }) + assert(events[:events].all? { |event| !event[:url].nil? }) end test 'list all events with pagination' do