From dd98c9fc385ec9475529bcc38f80c2a712ffee07 Mon Sep 17 00:00:00 2001 From: Ynda Jas Date: Fri, 13 Dec 2024 19:09:47 +0000 Subject: [PATCH] Update GraphQL approach for world index Given we're still in the learning stage with the GraphQL project, we've decided to minimise the changes needed on frontend apps by retaining the current heavily nested data structure. This updates Collections to work with that format (the changes to Publishing API are also in progress). This means that the code for the world index page in collections will be less divergent between paths for GraphQL and REST data sources. This commit undoes some of the divergence we initially introduced We plan to revisit simplifying the data structure later (into a less nested form) --- app/controllers/world_controller.rb | 11 +- app/models/graphql/world_index.rb | 17 + .../world_index_graphql_presenter.rb | 15 - app/presenters/world_index_presenter.rb | 14 +- app/queries/graphql/world_index_query.rb | 12 +- spec/fixtures/graphql/world_index.json | 2400 +++++++++-------- .../world_index_graphql_presenter_spec.rb | 95 - spec/presenters/world_index_presenter_spec.rb | 2 +- 8 files changed, 1239 insertions(+), 1327 deletions(-) create mode 100644 app/models/graphql/world_index.rb delete mode 100644 app/presenters/world_index_graphql_presenter.rb delete mode 100644 spec/presenters/world_index_graphql_presenter_spec.rb diff --git a/app/controllers/world_controller.rb b/app/controllers/world_controller.rb index 218430489..be073ee59 100644 --- a/app/controllers/world_controller.rb +++ b/app/controllers/world_controller.rb @@ -1,13 +1,14 @@ class WorldController < ApplicationController def index if Features.graphql_feature_enabled? || params.include?(:graphql) - index = WorldIndexGraphql.find!("/world") - @presented_index = WorldIndexGraphqlPresenter.new(index) + world_index = Graphql::WorldIndex.find!(request.path) + content_item_data = world_index.content_item else - index = WorldIndex.find!("/world") - @presented_index = WorldIndexPresenter.new(index) + world_index = WorldIndex.find!(request.path) + content_item_data = world_index.content_item.content_item_data end - setup_content_item_and_navigation_helpers(index) + @presented_index = WorldIndexPresenter.new(content_item_data) + setup_content_item_and_navigation_helpers(world_index) end end diff --git a/app/models/graphql/world_index.rb b/app/models/graphql/world_index.rb new file mode 100644 index 000000000..9652b7980 --- /dev/null +++ b/app/models/graphql/world_index.rb @@ -0,0 +1,17 @@ +class Graphql::WorldIndex + attr_reader :content_item + + def initialize(content_item) + @content_item = content_item + end + + def self.find!(base_path) + query = Graphql::WorldIndexQuery.new(base_path).query + + edition = Services.publishing_api.graphql_query(query) + .dig("data", "edition") + .deep_transform_keys(&:underscore) + + new(edition) + end +end diff --git a/app/presenters/world_index_graphql_presenter.rb b/app/presenters/world_index_graphql_presenter.rb deleted file mode 100644 index d3f99485d..000000000 --- a/app/presenters/world_index_graphql_presenter.rb +++ /dev/null @@ -1,15 +0,0 @@ -class WorldIndexGraphqlPresenter < WorldIndexPresenter - def title - @world_index.content_item["title"] - end - - def international_delegations - @world_index.content_item["internationalDelegations"] - end - -private - - def world_locations - @world_index.content_item["worldLocations"] - end -end diff --git a/app/presenters/world_index_presenter.rb b/app/presenters/world_index_presenter.rb index f4cecc910..d3a99abe1 100644 --- a/app/presenters/world_index_presenter.rb +++ b/app/presenters/world_index_presenter.rb @@ -4,22 +4,22 @@ class WorldIndexPresenter delegate :count, to: :world_locations, prefix: true delegate :count, to: :international_delegations, prefix: true - def initialize(world_index) - @world_index = world_index + def initialize(content_item_data) + @content_item_data = content_item_data end def title - @world_index.content_item.title + @content_item_data.fetch("title") end def grouped_world_locations - world_locations + @content_item_data.dig("details", "world_locations") .group_by { |location| location_group(location) } .sort end def international_delegations - details["international_delegations"] + @content_item_data.dig("details", "international_delegations") end def world_location_link(world_location) @@ -45,10 +45,10 @@ def location_group(location) end def details - @world_index.content_item.details + @content_item_data.fetch("details") end def world_locations - details["world_locations"] + @content_item_data.dig("details", "world_locations") end end diff --git a/app/queries/graphql/world_index_query.rb b/app/queries/graphql/world_index_query.rb index 0c45052a8..d0e47d0af 100644 --- a/app/queries/graphql/world_index_query.rb +++ b/app/queries/graphql/world_index_query.rb @@ -16,12 +16,14 @@ def query ... on WorldIndex { title - worldLocations { - ...worldLocationInfo - } + details { + worldLocations { + ...worldLocationInfo + } - internationalDelegations { - ...worldLocationInfo + internationalDelegations { + ...worldLocationInfo + } } } } diff --git a/spec/fixtures/graphql/world_index.json b/spec/fixtures/graphql/world_index.json index 8548576b3..171e97ea1 100644 --- a/spec/fixtures/graphql/world_index.json +++ b/spec/fixtures/graphql/world_index.json @@ -2,1205 +2,1207 @@ "data": { "edition": { "title": "Help and services around the world", - "worldLocations": [ - { - "active": true, - "name": "Afghanistan", - "slug": "afghanistan" - }, - { - "active": true, - "name": "Albania", - "slug": "albania" - }, - { - "active": true, - "name": "Algeria", - "slug": "algeria" - }, - { - "active": true, - "name": "American Samoa", - "slug": "american-samoa" - }, - { - "active": true, - "name": "Andorra", - "slug": "andorra" - }, - { - "active": true, - "name": "Angola", - "slug": "angola" - }, - { - "active": true, - "name": "Anguilla", - "slug": "anguilla" - }, - { - "active": true, - "name": "Antigua and Barbuda", - "slug": "antigua-and-barbuda" - }, - { - "active": true, - "name": "Argentina", - "slug": "argentina" - }, - { - "active": true, - "name": "Armenia", - "slug": "armenia" - }, - { - "active": true, - "name": "Aruba", - "slug": "aruba" - }, - { - "active": true, - "name": "Australia", - "slug": "australia" - }, - { - "active": true, - "name": "Austria", - "slug": "austria" - }, - { - "active": true, - "name": "Azerbaijan", - "slug": "azerbaijan" - }, - { - "active": true, - "name": "Bahamas", - "slug": "bahamas" - }, - { - "active": true, - "name": "Bahrain", - "slug": "bahrain" - }, - { - "active": true, - "name": "Bangladesh", - "slug": "bangladesh" - }, - { - "active": true, - "name": "Barbados", - "slug": "barbados" - }, - { - "active": true, - "name": "Belarus", - "slug": "belarus" - }, - { - "active": true, - "name": "Belgium", - "slug": "belgium" - }, - { - "active": true, - "name": "Belize", - "slug": "belize" - }, - { - "active": true, - "name": "Benin", - "slug": "benin" - }, - { - "active": true, - "name": "Bermuda", - "slug": "bermuda" - }, - { - "active": true, - "name": "Bhutan", - "slug": "bhutan" - }, - { - "active": true, - "name": "Bolivia", - "slug": "bolivia" - }, - { - "active": true, - "name": "Bonaire/St Eustatius/Saba", - "slug": "bonaire-st-eustatius-saba" - }, - { - "active": true, - "name": "Bosnia and Herzegovina", - "slug": "bosnia-and-herzegovina" - }, - { - "active": true, - "name": "Botswana", - "slug": "botswana" - }, - { - "active": true, - "name": "Brazil", - "slug": "brazil" - }, - { - "active": true, - "name": "British Antarctic Territory", - "slug": "british-antarctic-territory" - }, - { - "active": true, - "name": "British Indian Ocean Territory", - "slug": "british-indian-ocean-territory" - }, - { - "active": true, - "name": "British Virgin Islands", - "slug": "british-virgin-islands" - }, - { - "active": true, - "name": "Brunei", - "slug": "brunei" - }, - { - "active": true, - "name": "Bulgaria", - "slug": "bulgaria" - }, - { - "active": true, - "name": "Burkina Faso", - "slug": "burkina-faso" - }, - { - "active": true, - "name": "Burundi", - "slug": "burundi" - }, - { - "active": true, - "name": "Cambodia", - "slug": "cambodia" - }, - { - "active": true, - "name": "Cameroon", - "slug": "cameroon" - }, - { - "active": true, - "name": "Canada", - "slug": "canada" - }, - { - "active": true, - "name": "Cape Verde", - "slug": "cape-verde" - }, - { - "active": true, - "name": "Cayman Islands", - "slug": "cayman-islands" - }, - { - "active": true, - "name": "Central African Republic", - "slug": "central-african-republic" - }, - { - "active": true, - "name": "Chad", - "slug": "chad" - }, - { - "active": true, - "name": "Chile", - "slug": "chile" - }, - { - "active": true, - "name": "China", - "slug": "china" - }, - { - "active": true, - "name": "Colombia", - "slug": "colombia" - }, - { - "active": true, - "name": "Comoros", - "slug": "comoros" - }, - { - "active": true, - "name": "Congo", - "slug": "congo" - }, - { - "active": true, - "name": "Costa Rica", - "slug": "costa-rica" - }, - { - "active": true, - "name": "Cote d’Ivoire", - "slug": "cote-d-ivoire" - }, - { - "active": true, - "name": "Croatia", - "slug": "croatia" - }, - { - "active": true, - "name": "Cuba", - "slug": "cuba" - }, - { - "active": true, - "name": "Curaçao", - "slug": "curacao" - }, - { - "active": true, - "name": "Cyprus", - "slug": "cyprus" - }, - { - "active": true, - "name": "Czech Republic", - "slug": "czech-republic" - }, - { - "active": true, - "name": "Democratic Republic of the Congo", - "slug": "democratic-republic-of-the-congo" - }, - { - "active": true, - "name": "Denmark", - "slug": "denmark" - }, - { - "active": true, - "name": "Djibouti", - "slug": "djibouti" - }, - { - "active": true, - "name": "Dominica", - "slug": "dominica" - }, - { - "active": true, - "name": "Dominican Republic", - "slug": "dominican-republic" - }, - { - "active": true, - "name": "Ecuador", - "slug": "ecuador" - }, - { - "active": true, - "name": "Egypt", - "slug": "egypt" - }, - { - "active": true, - "name": "El Salvador", - "slug": "el-salvador" - }, - { - "active": true, - "name": "Equatorial Guinea", - "slug": "equatorial-guinea" - }, - { - "active": true, - "name": "Eritrea", - "slug": "eritrea" - }, - { - "active": true, - "name": "Estonia", - "slug": "estonia" - }, - { - "active": true, - "name": "Eswatini", - "slug": "eswatini" - }, - { - "active": true, - "name": "Ethiopia", - "slug": "ethiopia" - }, - { - "active": true, - "name": "Falkland Islands", - "slug": "falkland-islands" - }, - { - "active": true, - "name": "Federated States of Micronesia", - "slug": "federated-states-of-micronesia" - }, - { - "active": true, - "name": "Fiji", - "slug": "fiji" - }, - { - "active": true, - "name": "Finland", - "slug": "finland" - }, - { - "active": true, - "name": "France", - "slug": "france" - }, - { - "active": true, - "name": "French Guiana", - "slug": "french-guiana" - }, - { - "active": true, - "name": "French Polynesia", - "slug": "french-polynesia" - }, - { - "active": true, - "name": "Gabon", - "slug": "gabon" - }, - { - "active": true, - "name": "The Gambia", - "slug": "the-gambia" - }, - { - "active": true, - "name": "Georgia", - "slug": "georgia" - }, - { - "active": true, - "name": "Germany", - "slug": "germany" - }, - { - "active": true, - "name": "Ghana", - "slug": "ghana" - }, - { - "active": true, - "name": "Gibraltar", - "slug": "gibraltar" - }, - { - "active": true, - "name": "Greece", - "slug": "greece" - }, - { - "active": true, - "name": "Grenada", - "slug": "grenada" - }, - { - "active": true, - "name": "Guadeloupe", - "slug": "guadeloupe" - }, - { - "active": true, - "name": "Guatemala", - "slug": "guatemala" - }, - { - "active": true, - "name": "Guinea", - "slug": "guinea" - }, - { - "active": true, - "name": "Guinea-Bissau", - "slug": "guinea-bissau" - }, - { - "active": true, - "name": "Guyana", - "slug": "guyana" - }, - { - "active": true, - "name": "Haiti", - "slug": "haiti" - }, - { - "active": true, - "name": "Holy See", - "slug": "holy-see" - }, - { - "active": true, - "name": "Honduras", - "slug": "honduras" - }, - { - "active": true, - "name": "Hong Kong", - "slug": "hong-kong" - }, - { - "active": true, - "name": "Hungary", - "slug": "hungary" - }, - { - "active": true, - "name": "Iceland", - "slug": "iceland" - }, - { - "active": true, - "name": "India", - "slug": "india" - }, - { - "active": true, - "name": "Indonesia", - "slug": "indonesia" - }, - { - "active": true, - "name": "Iran", - "slug": "iran" - }, - { - "active": true, - "name": "Iraq", - "slug": "iraq" - }, - { - "active": true, - "name": "Ireland", - "slug": "ireland" - }, - { - "active": true, - "name": "Israel", - "slug": "israel" - }, - { - "active": true, - "name": "Italy", - "slug": "italy" - }, - { - "active": true, - "name": "Jamaica", - "slug": "jamaica" - }, - { - "active": true, - "name": "Japan", - "slug": "japan" - }, - { - "active": true, - "name": "Jordan", - "slug": "jordan" - }, - { - "active": true, - "name": "Kazakhstan", - "slug": "kazakhstan" - }, - { - "active": true, - "name": "Kenya", - "slug": "kenya" - }, - { - "active": true, - "name": "Kiribati", - "slug": "kiribati" - }, - { - "active": true, - "name": "Kosovo", - "slug": "kosovo" - }, - { - "active": true, - "name": "Kuwait", - "slug": "kuwait" - }, - { - "active": true, - "name": "Kyrgyzstan", - "slug": "kyrgyzstan" - }, - { - "active": true, - "name": "Laos", - "slug": "laos" - }, - { - "active": true, - "name": "Latvia", - "slug": "latvia" - }, - { - "active": true, - "name": "Lebanon", - "slug": "lebanon" - }, - { - "active": true, - "name": "Lesotho", - "slug": "lesotho" - }, - { - "active": true, - "name": "Liberia", - "slug": "liberia" - }, - { - "active": true, - "name": "Libya", - "slug": "libya" - }, - { - "active": true, - "name": "Liechtenstein", - "slug": "liechtenstein" - }, - { - "active": true, - "name": "Lithuania", - "slug": "lithuania" - }, - { - "active": true, - "name": "Luxembourg", - "slug": "luxembourg" - }, - { - "active": true, - "name": "Macao", - "slug": "macao" - }, - { - "active": true, - "name": "Madagascar", - "slug": "madagascar" - }, - { - "active": true, - "name": "Malawi", - "slug": "malawi" - }, - { - "active": true, - "name": "Malaysia", - "slug": "malaysia" - }, - { - "active": true, - "name": "Maldives", - "slug": "maldives" - }, - { - "active": true, - "name": "Mali", - "slug": "mali" - }, - { - "active": true, - "name": "Malta", - "slug": "malta" - }, - { - "active": true, - "name": "Marshall Islands", - "slug": "marshall-islands" - }, - { - "active": true, - "name": "Martinique", - "slug": "martinique" - }, - { - "active": true, - "name": "Mauritania", - "slug": "mauritania" - }, - { - "active": true, - "name": "Mauritius", - "slug": "mauritius" - }, - { - "active": true, - "name": "Mayotte", - "slug": "mayotte" - }, - { - "active": true, - "name": "Mexico", - "slug": "mexico" - }, - { - "active": true, - "name": "Moldova", - "slug": "moldova" - }, - { - "active": true, - "name": "Monaco", - "slug": "monaco" - }, - { - "active": true, - "name": "Mongolia", - "slug": "mongolia" - }, - { - "active": true, - "name": "Montenegro", - "slug": "montenegro" - }, - { - "active": true, - "name": "Montserrat", - "slug": "montserrat" - }, - { - "active": true, - "name": "Morocco", - "slug": "morocco" - }, - { - "active": true, - "name": "Mozambique", - "slug": "mozambique" - }, - { - "active": true, - "name": "Myanmar", - "slug": "myanmar" - }, - { - "active": true, - "name": "Namibia", - "slug": "namibia" - }, - { - "active": true, - "name": "Nauru", - "slug": "nauru" - }, - { - "active": true, - "name": "Nepal", - "slug": "nepal" - }, - { - "active": true, - "name": "Netherlands", - "slug": "netherlands" - }, - { - "active": true, - "name": "New Caledonia", - "slug": "new-caledonia" - }, - { - "active": true, - "name": "New Zealand", - "slug": "new-zealand" - }, - { - "active": true, - "name": "Nicaragua", - "slug": "nicaragua" - }, - { - "active": true, - "name": "Niger", - "slug": "niger" - }, - { - "active": true, - "name": "Nigeria", - "slug": "nigeria" - }, - { - "active": true, - "name": "North Korea", - "slug": "north-korea" - }, - { - "active": true, - "name": "North Macedonia", - "slug": "north-macedonia" - }, - { - "active": true, - "name": "Norway", - "slug": "norway" - }, - { - "active": true, - "name": "The Occupied Palestinian Territories", - "slug": "the-occupied-palestinian-territories" - }, - { - "active": true, - "name": "Oman", - "slug": "oman" - }, - { - "active": true, - "name": "Pakistan", - "slug": "pakistan" - }, - { - "active": true, - "name": "Palau", - "slug": "palau" - }, - { - "active": true, - "name": "Panama", - "slug": "panama" - }, - { - "active": true, - "name": "Papua New Guinea", - "slug": "papua-new-guinea" - }, - { - "active": true, - "name": "Paraguay", - "slug": "paraguay" - }, - { - "active": true, - "name": "Peru", - "slug": "peru" - }, - { - "active": true, - "name": "Philippines", - "slug": "philippines" - }, - { - "active": true, - "name": "Pitcairn Island", - "slug": "pitcairn-island" - }, - { - "active": true, - "name": "Poland", - "slug": "poland" - }, - { - "active": true, - "name": "Portugal", - "slug": "portugal" - }, - { - "active": true, - "name": "Qatar", - "slug": "qatar" - }, - { - "active": true, - "name": "Réunion", - "slug": "reunion" - }, - { - "active": true, - "name": "Romania", - "slug": "romania" - }, - { - "active": true, - "name": "Russia", - "slug": "russia" - }, - { - "active": true, - "name": "Rwanda", - "slug": "rwanda" - }, - { - "active": false, - "name": "Saint-Barthélemy", - "slug": "saint-barthelemy" - }, - { - "active": true, - "name": "Samoa", - "slug": "samoa" - }, - { - "active": true, - "name": "San Marino", - "slug": "san-marino" - }, - { - "active": true, - "name": "São Tomé and Principe", - "slug": "sao-tome-and-principe" - }, - { - "active": true, - "name": "Saudi Arabia", - "slug": "saudi-arabia" - }, - { - "active": true, - "name": "Senegal", - "slug": "senegal" - }, - { - "active": true, - "name": "Serbia", - "slug": "serbia" - }, - { - "active": true, - "name": "Seychelles", - "slug": "seychelles" - }, - { - "active": true, - "name": "Sierra Leone", - "slug": "sierra-leone" - }, - { - "active": true, - "name": "Singapore", - "slug": "singapore" - }, - { - "active": true, - "name": "Slovakia", - "slug": "slovakia" - }, - { - "active": true, - "name": "Slovenia", - "slug": "slovenia" - }, - { - "active": true, - "name": "Solomon Islands", - "slug": "solomon-islands" - }, - { - "active": true, - "name": "Somalia", - "slug": "somalia" - }, - { - "active": true, - "name": "South Africa", - "slug": "south-africa" - }, - { - "active": true, - "name": "South Georgia and the South Sandwich Islands", - "slug": "south-georgia-and-the-south-sandwich-islands" - }, - { - "active": true, - "name": "South Korea", - "slug": "south-korea" - }, - { - "active": true, - "name": "South Sudan", - "slug": "south-sudan" - }, - { - "active": true, - "name": "Spain", - "slug": "spain" - }, - { - "active": true, - "name": "Sri Lanka", - "slug": "sri-lanka" - }, - { - "active": true, - "name": "St Helena, Ascension and Tristan da Cunha", - "slug": "st-helena-ascension-and-tristan-da-cunha" - }, - { - "active": true, - "name": "St Kitts and Nevis", - "slug": "st-kitts-and-nevis" - }, - { - "active": true, - "name": "St Lucia", - "slug": "st-lucia" - }, - { - "active": true, - "name": "St Maarten", - "slug": "st-maarten" - }, - { - "active": false, - "name": "St Martin", - "slug": "st-martin" - }, - { - "active": true, - "name": "St Pierre & Miquelon", - "slug": "st-pierre-and-miquelon" - }, - { - "active": true, - "name": "St Vincent and The Grenadines", - "slug": "st-vincent-and-the-grenadines" - }, - { - "active": true, - "name": "Sudan", - "slug": "sudan" - }, - { - "active": true, - "name": "Suriname", - "slug": "suriname" - }, - { - "active": true, - "name": "Sweden", - "slug": "sweden" - }, - { - "active": true, - "name": "Switzerland", - "slug": "switzerland" - }, - { - "active": true, - "name": "Syria", - "slug": "syria" - }, - { - "active": true, - "name": "Taiwan", - "slug": "taiwan" - }, - { - "active": true, - "name": "Tajikistan", - "slug": "tajikistan" - }, - { - "active": true, - "name": "Tanzania", - "slug": "tanzania" - }, - { - "active": true, - "name": "Thailand", - "slug": "thailand" - }, - { - "active": true, - "name": "Timor Leste", - "slug": "timor-leste" - }, - { - "active": true, - "name": "Togo", - "slug": "togo" - }, - { - "active": true, - "name": "Tonga", - "slug": "tonga" - }, - { - "active": true, - "name": "Trinidad and Tobago", - "slug": "trinidad-and-tobago" - }, - { - "active": true, - "name": "Tunisia", - "slug": "tunisia" - }, - { - "active": true, - "name": "Turkey", - "slug": "turkey" - }, - { - "active": true, - "name": "Turkmenistan", - "slug": "turkmenistan" - }, - { - "active": true, - "name": "Turks and Caicos Islands", - "slug": "turks-and-caicos-islands" - }, - { - "active": true, - "name": "Tuvalu", - "slug": "tuvalu" - }, - { - "active": true, - "name": "Uganda", - "slug": "uganda" - }, - { - "active": true, - "name": "Ukraine", - "slug": "ukraine" - }, - { - "active": true, - "name": "United Arab Emirates", - "slug": "united-arab-emirates" - }, - { - "active": false, - "name": "United Kingdom", - "slug": "united-kingdom" - }, - { - "active": true, - "name": "Uruguay", - "slug": "uruguay" - }, - { - "active": true, - "name": "USA", - "slug": "usa" - }, - { - "active": true, - "name": "Uzbekistan", - "slug": "uzbekistan" - }, - { - "active": true, - "name": "Vanuatu", - "slug": "vanuatu" - }, - { - "active": true, - "name": "Venezuela", - "slug": "venezuela" - }, - { - "active": true, - "name": "Vietnam", - "slug": "vietnam" - }, - { - "active": true, - "name": "Wallis and Futuna", - "slug": "wallis-and-futuna" - }, - { - "active": true, - "name": "Western Sahara", - "slug": "western-sahara" - }, - { - "active": true, - "name": "Yemen", - "slug": "yemen" - }, - { - "active": true, - "name": "Zambia", - "slug": "zambia" - }, - { - "active": true, - "name": "Zimbabwe", - "slug": "zimbabwe" - } - ], - "internationalDelegations": [ - { - "active": true, - "name": "UK and the Commonwealth", - "slug": "uk-and-the-commonwealth" - }, - { - "active": true, - "name": "UK Delegation to Council of Europe", - "slug": "uk-delegation-to-council-of-europe" - }, - { - "active": true, - "name": "UK Delegation to Organization for Security and Co-operation in Europe", - "slug": "uk-delegation-to-organization-for-security-and-co-operation-in-europe" - }, - { - "active": true, - "name": "UK Joint Delegation to NATO", - "slug": "uk-joint-delegation-to-nato" - }, - { - "active": true, - "name": "UK Mission to ASEAN", - "slug": "uk-mission-to-asean" - }, - { - "active": true, - "name": "UK Mission to the European Union", - "slug": "uk-mission-to-the-eu" - }, - { - "active": true, - "name": "UK Mission to the United Nations", - "slug": "uk-mission-to-the-united-nations" - }, - { - "active": true, - "name": "UK Mission to the United Nations, New York", - "slug": "uk-mission-to-the-united-nations-new-york" - }, - { - "active": true, - "name": "UK Mission to the WTO, UN and Other International Organisations (Geneva)", - "slug": "uk-mission-to-the-wto-un-and-other-international-organisations-geneva" - }, - { - "active": true, - "name": "The UK Permanent Delegation to the OECD (Organisation for Economic Co-operation and Development)", - "slug": "the-uk-permanent-delegation-to-the-oecd-organisation-for-economic-co-operation-and-development" - } - ] + "details": { + "worldLocations": [ + { + "active": true, + "name": "Afghanistan", + "slug": "afghanistan" + }, + { + "active": true, + "name": "Albania", + "slug": "albania" + }, + { + "active": true, + "name": "Algeria", + "slug": "algeria" + }, + { + "active": true, + "name": "American Samoa", + "slug": "american-samoa" + }, + { + "active": true, + "name": "Andorra", + "slug": "andorra" + }, + { + "active": true, + "name": "Angola", + "slug": "angola" + }, + { + "active": true, + "name": "Anguilla", + "slug": "anguilla" + }, + { + "active": true, + "name": "Antigua and Barbuda", + "slug": "antigua-and-barbuda" + }, + { + "active": true, + "name": "Argentina", + "slug": "argentina" + }, + { + "active": true, + "name": "Armenia", + "slug": "armenia" + }, + { + "active": true, + "name": "Aruba", + "slug": "aruba" + }, + { + "active": true, + "name": "Australia", + "slug": "australia" + }, + { + "active": true, + "name": "Austria", + "slug": "austria" + }, + { + "active": true, + "name": "Azerbaijan", + "slug": "azerbaijan" + }, + { + "active": true, + "name": "Bahamas", + "slug": "bahamas" + }, + { + "active": true, + "name": "Bahrain", + "slug": "bahrain" + }, + { + "active": true, + "name": "Bangladesh", + "slug": "bangladesh" + }, + { + "active": true, + "name": "Barbados", + "slug": "barbados" + }, + { + "active": true, + "name": "Belarus", + "slug": "belarus" + }, + { + "active": true, + "name": "Belgium", + "slug": "belgium" + }, + { + "active": true, + "name": "Belize", + "slug": "belize" + }, + { + "active": true, + "name": "Benin", + "slug": "benin" + }, + { + "active": true, + "name": "Bermuda", + "slug": "bermuda" + }, + { + "active": true, + "name": "Bhutan", + "slug": "bhutan" + }, + { + "active": true, + "name": "Bolivia", + "slug": "bolivia" + }, + { + "active": true, + "name": "Bonaire/St Eustatius/Saba", + "slug": "bonaire-st-eustatius-saba" + }, + { + "active": true, + "name": "Bosnia and Herzegovina", + "slug": "bosnia-and-herzegovina" + }, + { + "active": true, + "name": "Botswana", + "slug": "botswana" + }, + { + "active": true, + "name": "Brazil", + "slug": "brazil" + }, + { + "active": true, + "name": "British Antarctic Territory", + "slug": "british-antarctic-territory" + }, + { + "active": true, + "name": "British Indian Ocean Territory", + "slug": "british-indian-ocean-territory" + }, + { + "active": true, + "name": "British Virgin Islands", + "slug": "british-virgin-islands" + }, + { + "active": true, + "name": "Brunei", + "slug": "brunei" + }, + { + "active": true, + "name": "Bulgaria", + "slug": "bulgaria" + }, + { + "active": true, + "name": "Burkina Faso", + "slug": "burkina-faso" + }, + { + "active": true, + "name": "Burundi", + "slug": "burundi" + }, + { + "active": true, + "name": "Cambodia", + "slug": "cambodia" + }, + { + "active": true, + "name": "Cameroon", + "slug": "cameroon" + }, + { + "active": true, + "name": "Canada", + "slug": "canada" + }, + { + "active": true, + "name": "Cape Verde", + "slug": "cape-verde" + }, + { + "active": true, + "name": "Cayman Islands", + "slug": "cayman-islands" + }, + { + "active": true, + "name": "Central African Republic", + "slug": "central-african-republic" + }, + { + "active": true, + "name": "Chad", + "slug": "chad" + }, + { + "active": true, + "name": "Chile", + "slug": "chile" + }, + { + "active": true, + "name": "China", + "slug": "china" + }, + { + "active": true, + "name": "Colombia", + "slug": "colombia" + }, + { + "active": true, + "name": "Comoros", + "slug": "comoros" + }, + { + "active": true, + "name": "Congo", + "slug": "congo" + }, + { + "active": true, + "name": "Costa Rica", + "slug": "costa-rica" + }, + { + "active": true, + "name": "Cote d’Ivoire", + "slug": "cote-d-ivoire" + }, + { + "active": true, + "name": "Croatia", + "slug": "croatia" + }, + { + "active": true, + "name": "Cuba", + "slug": "cuba" + }, + { + "active": true, + "name": "Curaçao", + "slug": "curacao" + }, + { + "active": true, + "name": "Cyprus", + "slug": "cyprus" + }, + { + "active": true, + "name": "Czech Republic", + "slug": "czech-republic" + }, + { + "active": true, + "name": "Democratic Republic of the Congo", + "slug": "democratic-republic-of-the-congo" + }, + { + "active": true, + "name": "Denmark", + "slug": "denmark" + }, + { + "active": true, + "name": "Djibouti", + "slug": "djibouti" + }, + { + "active": true, + "name": "Dominica", + "slug": "dominica" + }, + { + "active": true, + "name": "Dominican Republic", + "slug": "dominican-republic" + }, + { + "active": true, + "name": "Ecuador", + "slug": "ecuador" + }, + { + "active": true, + "name": "Egypt", + "slug": "egypt" + }, + { + "active": true, + "name": "El Salvador", + "slug": "el-salvador" + }, + { + "active": true, + "name": "Equatorial Guinea", + "slug": "equatorial-guinea" + }, + { + "active": true, + "name": "Eritrea", + "slug": "eritrea" + }, + { + "active": true, + "name": "Estonia", + "slug": "estonia" + }, + { + "active": true, + "name": "Eswatini", + "slug": "eswatini" + }, + { + "active": true, + "name": "Ethiopia", + "slug": "ethiopia" + }, + { + "active": true, + "name": "Falkland Islands", + "slug": "falkland-islands" + }, + { + "active": true, + "name": "Federated States of Micronesia", + "slug": "federated-states-of-micronesia" + }, + { + "active": true, + "name": "Fiji", + "slug": "fiji" + }, + { + "active": true, + "name": "Finland", + "slug": "finland" + }, + { + "active": true, + "name": "France", + "slug": "france" + }, + { + "active": true, + "name": "French Guiana", + "slug": "french-guiana" + }, + { + "active": true, + "name": "French Polynesia", + "slug": "french-polynesia" + }, + { + "active": true, + "name": "Gabon", + "slug": "gabon" + }, + { + "active": true, + "name": "The Gambia", + "slug": "the-gambia" + }, + { + "active": true, + "name": "Georgia", + "slug": "georgia" + }, + { + "active": true, + "name": "Germany", + "slug": "germany" + }, + { + "active": true, + "name": "Ghana", + "slug": "ghana" + }, + { + "active": true, + "name": "Gibraltar", + "slug": "gibraltar" + }, + { + "active": true, + "name": "Greece", + "slug": "greece" + }, + { + "active": true, + "name": "Grenada", + "slug": "grenada" + }, + { + "active": true, + "name": "Guadeloupe", + "slug": "guadeloupe" + }, + { + "active": true, + "name": "Guatemala", + "slug": "guatemala" + }, + { + "active": true, + "name": "Guinea", + "slug": "guinea" + }, + { + "active": true, + "name": "Guinea-Bissau", + "slug": "guinea-bissau" + }, + { + "active": true, + "name": "Guyana", + "slug": "guyana" + }, + { + "active": true, + "name": "Haiti", + "slug": "haiti" + }, + { + "active": true, + "name": "Holy See", + "slug": "holy-see" + }, + { + "active": true, + "name": "Honduras", + "slug": "honduras" + }, + { + "active": true, + "name": "Hong Kong", + "slug": "hong-kong" + }, + { + "active": true, + "name": "Hungary", + "slug": "hungary" + }, + { + "active": true, + "name": "Iceland", + "slug": "iceland" + }, + { + "active": true, + "name": "India", + "slug": "india" + }, + { + "active": true, + "name": "Indonesia", + "slug": "indonesia" + }, + { + "active": true, + "name": "Iran", + "slug": "iran" + }, + { + "active": true, + "name": "Iraq", + "slug": "iraq" + }, + { + "active": true, + "name": "Ireland", + "slug": "ireland" + }, + { + "active": true, + "name": "Israel", + "slug": "israel" + }, + { + "active": true, + "name": "Italy", + "slug": "italy" + }, + { + "active": true, + "name": "Jamaica", + "slug": "jamaica" + }, + { + "active": true, + "name": "Japan", + "slug": "japan" + }, + { + "active": true, + "name": "Jordan", + "slug": "jordan" + }, + { + "active": true, + "name": "Kazakhstan", + "slug": "kazakhstan" + }, + { + "active": true, + "name": "Kenya", + "slug": "kenya" + }, + { + "active": true, + "name": "Kiribati", + "slug": "kiribati" + }, + { + "active": true, + "name": "Kosovo", + "slug": "kosovo" + }, + { + "active": true, + "name": "Kuwait", + "slug": "kuwait" + }, + { + "active": true, + "name": "Kyrgyzstan", + "slug": "kyrgyzstan" + }, + { + "active": true, + "name": "Laos", + "slug": "laos" + }, + { + "active": true, + "name": "Latvia", + "slug": "latvia" + }, + { + "active": true, + "name": "Lebanon", + "slug": "lebanon" + }, + { + "active": true, + "name": "Lesotho", + "slug": "lesotho" + }, + { + "active": true, + "name": "Liberia", + "slug": "liberia" + }, + { + "active": true, + "name": "Libya", + "slug": "libya" + }, + { + "active": true, + "name": "Liechtenstein", + "slug": "liechtenstein" + }, + { + "active": true, + "name": "Lithuania", + "slug": "lithuania" + }, + { + "active": true, + "name": "Luxembourg", + "slug": "luxembourg" + }, + { + "active": true, + "name": "Macao", + "slug": "macao" + }, + { + "active": true, + "name": "Madagascar", + "slug": "madagascar" + }, + { + "active": true, + "name": "Malawi", + "slug": "malawi" + }, + { + "active": true, + "name": "Malaysia", + "slug": "malaysia" + }, + { + "active": true, + "name": "Maldives", + "slug": "maldives" + }, + { + "active": true, + "name": "Mali", + "slug": "mali" + }, + { + "active": true, + "name": "Malta", + "slug": "malta" + }, + { + "active": true, + "name": "Marshall Islands", + "slug": "marshall-islands" + }, + { + "active": true, + "name": "Martinique", + "slug": "martinique" + }, + { + "active": true, + "name": "Mauritania", + "slug": "mauritania" + }, + { + "active": true, + "name": "Mauritius", + "slug": "mauritius" + }, + { + "active": true, + "name": "Mayotte", + "slug": "mayotte" + }, + { + "active": true, + "name": "Mexico", + "slug": "mexico" + }, + { + "active": true, + "name": "Moldova", + "slug": "moldova" + }, + { + "active": true, + "name": "Monaco", + "slug": "monaco" + }, + { + "active": true, + "name": "Mongolia", + "slug": "mongolia" + }, + { + "active": true, + "name": "Montenegro", + "slug": "montenegro" + }, + { + "active": true, + "name": "Montserrat", + "slug": "montserrat" + }, + { + "active": true, + "name": "Morocco", + "slug": "morocco" + }, + { + "active": true, + "name": "Mozambique", + "slug": "mozambique" + }, + { + "active": true, + "name": "Myanmar", + "slug": "myanmar" + }, + { + "active": true, + "name": "Namibia", + "slug": "namibia" + }, + { + "active": true, + "name": "Nauru", + "slug": "nauru" + }, + { + "active": true, + "name": "Nepal", + "slug": "nepal" + }, + { + "active": true, + "name": "Netherlands", + "slug": "netherlands" + }, + { + "active": true, + "name": "New Caledonia", + "slug": "new-caledonia" + }, + { + "active": true, + "name": "New Zealand", + "slug": "new-zealand" + }, + { + "active": true, + "name": "Nicaragua", + "slug": "nicaragua" + }, + { + "active": true, + "name": "Niger", + "slug": "niger" + }, + { + "active": true, + "name": "Nigeria", + "slug": "nigeria" + }, + { + "active": true, + "name": "North Korea", + "slug": "north-korea" + }, + { + "active": true, + "name": "North Macedonia", + "slug": "north-macedonia" + }, + { + "active": true, + "name": "Norway", + "slug": "norway" + }, + { + "active": true, + "name": "The Occupied Palestinian Territories", + "slug": "the-occupied-palestinian-territories" + }, + { + "active": true, + "name": "Oman", + "slug": "oman" + }, + { + "active": true, + "name": "Pakistan", + "slug": "pakistan" + }, + { + "active": true, + "name": "Palau", + "slug": "palau" + }, + { + "active": true, + "name": "Panama", + "slug": "panama" + }, + { + "active": true, + "name": "Papua New Guinea", + "slug": "papua-new-guinea" + }, + { + "active": true, + "name": "Paraguay", + "slug": "paraguay" + }, + { + "active": true, + "name": "Peru", + "slug": "peru" + }, + { + "active": true, + "name": "Philippines", + "slug": "philippines" + }, + { + "active": true, + "name": "Pitcairn Island", + "slug": "pitcairn-island" + }, + { + "active": true, + "name": "Poland", + "slug": "poland" + }, + { + "active": true, + "name": "Portugal", + "slug": "portugal" + }, + { + "active": true, + "name": "Qatar", + "slug": "qatar" + }, + { + "active": true, + "name": "Réunion", + "slug": "reunion" + }, + { + "active": true, + "name": "Romania", + "slug": "romania" + }, + { + "active": true, + "name": "Russia", + "slug": "russia" + }, + { + "active": true, + "name": "Rwanda", + "slug": "rwanda" + }, + { + "active": false, + "name": "Saint-Barthélemy", + "slug": "saint-barthelemy" + }, + { + "active": true, + "name": "Samoa", + "slug": "samoa" + }, + { + "active": true, + "name": "San Marino", + "slug": "san-marino" + }, + { + "active": true, + "name": "São Tomé and Principe", + "slug": "sao-tome-and-principe" + }, + { + "active": true, + "name": "Saudi Arabia", + "slug": "saudi-arabia" + }, + { + "active": true, + "name": "Senegal", + "slug": "senegal" + }, + { + "active": true, + "name": "Serbia", + "slug": "serbia" + }, + { + "active": true, + "name": "Seychelles", + "slug": "seychelles" + }, + { + "active": true, + "name": "Sierra Leone", + "slug": "sierra-leone" + }, + { + "active": true, + "name": "Singapore", + "slug": "singapore" + }, + { + "active": true, + "name": "Slovakia", + "slug": "slovakia" + }, + { + "active": true, + "name": "Slovenia", + "slug": "slovenia" + }, + { + "active": true, + "name": "Solomon Islands", + "slug": "solomon-islands" + }, + { + "active": true, + "name": "Somalia", + "slug": "somalia" + }, + { + "active": true, + "name": "South Africa", + "slug": "south-africa" + }, + { + "active": true, + "name": "South Georgia and the South Sandwich Islands", + "slug": "south-georgia-and-the-south-sandwich-islands" + }, + { + "active": true, + "name": "South Korea", + "slug": "south-korea" + }, + { + "active": true, + "name": "South Sudan", + "slug": "south-sudan" + }, + { + "active": true, + "name": "Spain", + "slug": "spain" + }, + { + "active": true, + "name": "Sri Lanka", + "slug": "sri-lanka" + }, + { + "active": true, + "name": "St Helena, Ascension and Tristan da Cunha", + "slug": "st-helena-ascension-and-tristan-da-cunha" + }, + { + "active": true, + "name": "St Kitts and Nevis", + "slug": "st-kitts-and-nevis" + }, + { + "active": true, + "name": "St Lucia", + "slug": "st-lucia" + }, + { + "active": true, + "name": "St Maarten", + "slug": "st-maarten" + }, + { + "active": false, + "name": "St Martin", + "slug": "st-martin" + }, + { + "active": true, + "name": "St Pierre & Miquelon", + "slug": "st-pierre-and-miquelon" + }, + { + "active": true, + "name": "St Vincent and The Grenadines", + "slug": "st-vincent-and-the-grenadines" + }, + { + "active": true, + "name": "Sudan", + "slug": "sudan" + }, + { + "active": true, + "name": "Suriname", + "slug": "suriname" + }, + { + "active": true, + "name": "Sweden", + "slug": "sweden" + }, + { + "active": true, + "name": "Switzerland", + "slug": "switzerland" + }, + { + "active": true, + "name": "Syria", + "slug": "syria" + }, + { + "active": true, + "name": "Taiwan", + "slug": "taiwan" + }, + { + "active": true, + "name": "Tajikistan", + "slug": "tajikistan" + }, + { + "active": true, + "name": "Tanzania", + "slug": "tanzania" + }, + { + "active": true, + "name": "Thailand", + "slug": "thailand" + }, + { + "active": true, + "name": "Timor Leste", + "slug": "timor-leste" + }, + { + "active": true, + "name": "Togo", + "slug": "togo" + }, + { + "active": true, + "name": "Tonga", + "slug": "tonga" + }, + { + "active": true, + "name": "Trinidad and Tobago", + "slug": "trinidad-and-tobago" + }, + { + "active": true, + "name": "Tunisia", + "slug": "tunisia" + }, + { + "active": true, + "name": "Turkey", + "slug": "turkey" + }, + { + "active": true, + "name": "Turkmenistan", + "slug": "turkmenistan" + }, + { + "active": true, + "name": "Turks and Caicos Islands", + "slug": "turks-and-caicos-islands" + }, + { + "active": true, + "name": "Tuvalu", + "slug": "tuvalu" + }, + { + "active": true, + "name": "Uganda", + "slug": "uganda" + }, + { + "active": true, + "name": "Ukraine", + "slug": "ukraine" + }, + { + "active": true, + "name": "United Arab Emirates", + "slug": "united-arab-emirates" + }, + { + "active": false, + "name": "United Kingdom", + "slug": "united-kingdom" + }, + { + "active": true, + "name": "Uruguay", + "slug": "uruguay" + }, + { + "active": true, + "name": "USA", + "slug": "usa" + }, + { + "active": true, + "name": "Uzbekistan", + "slug": "uzbekistan" + }, + { + "active": true, + "name": "Vanuatu", + "slug": "vanuatu" + }, + { + "active": true, + "name": "Venezuela", + "slug": "venezuela" + }, + { + "active": true, + "name": "Vietnam", + "slug": "vietnam" + }, + { + "active": true, + "name": "Wallis and Futuna", + "slug": "wallis-and-futuna" + }, + { + "active": true, + "name": "Western Sahara", + "slug": "western-sahara" + }, + { + "active": true, + "name": "Yemen", + "slug": "yemen" + }, + { + "active": true, + "name": "Zambia", + "slug": "zambia" + }, + { + "active": true, + "name": "Zimbabwe", + "slug": "zimbabwe" + } + ], + "internationalDelegations": [ + { + "active": true, + "name": "UK and the Commonwealth", + "slug": "uk-and-the-commonwealth" + }, + { + "active": true, + "name": "UK Delegation to Council of Europe", + "slug": "uk-delegation-to-council-of-europe" + }, + { + "active": true, + "name": "UK Delegation to Organization for Security and Co-operation in Europe", + "slug": "uk-delegation-to-organization-for-security-and-co-operation-in-europe" + }, + { + "active": true, + "name": "UK Joint Delegation to NATO", + "slug": "uk-joint-delegation-to-nato" + }, + { + "active": true, + "name": "UK Mission to ASEAN", + "slug": "uk-mission-to-asean" + }, + { + "active": true, + "name": "UK Mission to the European Union", + "slug": "uk-mission-to-the-eu" + }, + { + "active": true, + "name": "UK Mission to the United Nations", + "slug": "uk-mission-to-the-united-nations" + }, + { + "active": true, + "name": "UK Mission to the United Nations, New York", + "slug": "uk-mission-to-the-united-nations-new-york" + }, + { + "active": true, + "name": "UK Mission to the WTO, UN and Other International Organisations (Geneva)", + "slug": "uk-mission-to-the-wto-un-and-other-international-organisations-geneva" + }, + { + "active": true, + "name": "The UK Permanent Delegation to the OECD (Organisation for Economic Co-operation and Development)", + "slug": "the-uk-permanent-delegation-to-the-oecd-organisation-for-economic-co-operation-and-development" + } + ] + } } } } diff --git a/spec/presenters/world_index_graphql_presenter_spec.rb b/spec/presenters/world_index_graphql_presenter_spec.rb deleted file mode 100644 index 4de963628..000000000 --- a/spec/presenters/world_index_graphql_presenter_spec.rb +++ /dev/null @@ -1,95 +0,0 @@ -RSpec.describe WorldIndexGraphqlPresenter do - before do - fixture = fetch_graphql_fixture("world_index").dig("data", "edition") - content_item = WorldIndexGraphql.new(fixture) - @world_index_presenter ||= described_class.new(content_item) - end - - describe "#title" do - subject { @world_index_presenter.title } - - it "returns the title from the content item" do - expect(subject).to eq("Help and services around the world") - end - end - - describe "#grouped_world_locations" do - subject { @world_index_presenter.grouped_world_locations } - - it "groups world locations by letter" do - expect(subject.length).to be 25 # No locations beginning with `X` - expect(subject.first.first).to eq "A" - expect(subject.last.first).to eq "Z" - end - - it "disregards the `The` prefix of world location names when grouping" do - g_group = subject.find { |group| group.first == "G" } - g_group_locations = g_group.last - - expect(g_group_locations.pluck("name")).to include "The Gambia" - end - end - - describe "#world_locations_count" do - subject { @world_index_presenter.world_locations_count } - - it "returns the number of world locations" do - expect(subject).to be 229 - end - end - - describe "#world_location_link" do - subject { @world_index_presenter.world_location_link(location) } - - context "when the location is active" do - let(:location) do - { - "active": true, - "name": "Afghanistan", - "slug": "afghanistan", - }.with_indifferent_access - end - - it "returns a link to the location" do - expect(subject).to eq "Afghanistan" - end - end - - context "when the location is inactive" do - let(:location) do - { - "active": false, - "name": "United Kingdom", - "slug": "united-kingdom", - }.with_indifferent_access - end - - it "returns the location" do - expect(subject).to eq "United Kingdom" - end - end - end - - describe "#filter_terms" do - let(:location) do - { - "name": "United Kingdom", - "slug": "united-kingdom", - }.with_indifferent_access - end - - subject { @world_index_presenter.filter_terms(location) } - - it "returns the joined name and slug" do - expect(subject).to eq "united-kingdom United Kingdom" - end - end - - describe "#international_delegations_count" do - subject { @world_index_presenter.international_delegations_count } - - it "returns the number of international delegations" do - expect(subject).to be 10 - end - end -end diff --git a/spec/presenters/world_index_presenter_spec.rb b/spec/presenters/world_index_presenter_spec.rb index 0d13e068f..ef908f204 100644 --- a/spec/presenters/world_index_presenter_spec.rb +++ b/spec/presenters/world_index_presenter_spec.rb @@ -3,7 +3,7 @@ fixture = GovukSchemas::Example.find("world_index", example_name: "world_index") content_item = ContentItem.new(fixture) world_index = WorldIndex.new(content_item) - @world_index_presenter ||= described_class.new(world_index) + @world_index_presenter ||= described_class.new(world_index.content_item.content_item_data) end describe "#title" do