gemini-suggestions, tests-fail

This commit is contained in:
Ole-Morten Duesund 2025-06-06 21:12:46 +02:00
commit 314bffc4f8
8 changed files with 429 additions and 15 deletions

106
spec/app_spec.rb Normal file
View file

@ -0,0 +1,106 @@
# frozen_string_literal: true
# spec/app_spec.rb
require_relative 'spec_helper' # Load common setup
RSpec.describe 'No as a Service' do
include Rack::Test::Methods # Rack::Test methods included via spec_helper.rb
# The `app` method is defined in spec_helper.rb, required by Rack::Test
context 'GET /' do
it 'returns a default English "no" in HTML' do
get '/'
# Debugging: puts last_response.status, last_response.body
expect(last_response.status).to eq(200), "Expected status 200, got #{last_response.status}"
expect(last_response.body).to include('No'), "Expected body to include 'No', got:\n#{last_response.body}"
expect(last_response.content_type).to include('text/html'),
"Expected HTML content type, got #{last_response.content_type}"
end
it 'returns JSON when Accept header is application/json' do
header 'Accept', 'application/json'
get '/'
expect(last_response.status).to eq(200), "Expected status 200 with Accept: JSON, got #{last_response.status}"
expect(last_response.content_type).to include('application/json'),
"Expected JSON content type with Accept: JSON, got #{last_response.content_type}"
json_response = JSON.parse(last_response.body)
expect(json_response).to be_a(Hash), "Expected JSON response to be a Hash, got #{json_response.class}"
expect(json_response['response']).to be_a(String),
"Expected 'response' key with string value, got #{json_response['response'].class}"
expect(json_response['response']).not_to be_empty, "Expected 'response' value to be non-empty"
end
it 'returns JSON when format parameter is json' do
get '/?format=json'
expect(last_response.status).to eq(200), "Expected status 200 with ?format=json, got #{last_response.status}"
expect(last_response.content_type).to include('application/json'),
"Expected JSON content type with ?format=json, got #{last_response.content_type}"
json_response = JSON.parse(last_response.body)
expect(json_response).to be_a(Hash), "Expected JSON response to be a Hash, got #{json_response.class}"
expect(json_response['response']).to be_a(String),
"Expected 'response' key with string value, got #{json_response['response'].class}"
expect(json_response['response']).not_to be_empty, "Expected 'response' value to be non-empty"
end
end
context 'GET /:lang_code' do
it 'returns "no" in Norwegian (no)' do
get '/no'
expect(last_response.status).to eq(200), "Expected status 200 for /no, got #{last_response.status}"
expect(last_response.body).to include('Nei'),
"Expected body to include 'Nei' for /no, got:\n#{last_response.body}"
expect(last_response.content_type).to include('text/html'),
"Expected HTML content type for /no, got #{last_response.content_type}"
end
it 'returns "no" in Swedish (sv)' do
get '/sv'
expect(last_response.status).to eq(200), "Expected status 200 for /sv, got #{last_response.status}"
expect(last_response.body).to include('Nej'),
"Expected body to include 'Nej' for /sv, got:\n#{last_response.body}"
expect(last_response.content_type).to include('text/html'),
"Expected HTML content type for /sv, got #{last_response.content_type}"
end
it 'returns 404 for an unsupported language code' do
get '/xyz'
expect(last_response.status).to eq(404),
"Expected status 404 for unsupported language, got #{last_response.status}"
expect(last_response.body).to include('Not Found'),
"Expected body to include 'Not Found', got:\n#{last_response.body}"
end
end
context 'GET /languages' do
it 'lists all supported languages in JSON' do
get '/languages'
expect(last_response.status).to eq(200), "Expected status 200 for /languages, got #{last_response.status}"
expect(last_response.content_type).to include('application/json'),
"Expected JSON content type for /languages, got #{last_response.content_type}"
json_response = JSON.parse(last_response.body)
expect(json_response).to be_an(Array), "Expected JSON response to be an Array, got #{json_response.class}"
# Check for a subset of expected languages. Add all languages from your responses.yml.
expected_languages = %w[en no sv fi is da fo].sort
actual_languages = json_response.sort
expect(actual_languages.size).to eq(expected_languages.size),
"Expected #{expected_languages.size} languages, got #{actual_languages.size}"
expect(actual_languages).to eq(expected_languages), 'Language list mismatch.'
end
end
context 'GET /health' do
it 'returns OK' do
get '/health'
expect(last_response.status).to eq(200), "Expected status 200 for /health, got #{last_response.status}"
expect(last_response.body).to eq('OK'), "Expected body 'OK' for /health, got '#{last_response.body}'"
expect(last_response.content_type).to include('text/plain'),
"Expected text/plain content type for /health, got #{last_response.content_type}"
end
end
end