1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-20 14:54:15 +01:00

(api) events: category,themes,age_range,url

This commit is contained in:
Sylvain 2023-03-02 17:42:10 +01:00
parent 00583a25ff
commit 5e186ebf14
5 changed files with 49 additions and 2 deletions

View File

@ -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

View File

@ -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"
}
]
}

View File

@ -1 +1,3 @@
# frozen_string_literal: true
json.extract! event, :id, :title, :description, :updated_at, :created_at

View File

@ -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

View File

@ -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