diff --git a/app/controllers/break_escape/application_controller.rb b/app/controllers/break_escape/application_controller.rb index 54a1911..4ada373 100644 --- a/app/controllers/break_escape/application_controller.rb +++ b/app/controllers/break_escape/application_controller.rb @@ -17,6 +17,11 @@ module BreakEscape end helper_method :current_player + # Tell Pundit to use current_player as the user for authorization + def pundit_user + current_player + end + # Handle authorization errors rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized diff --git a/db/migrate/20251120155358_create_break_escape_games.rb b/db/migrate/20251120155358_create_break_escape_games.rb index 890cc21..348d2b0 100644 --- a/db/migrate/20251120155358_create_break_escape_games.rb +++ b/db/migrate/20251120155358_create_break_escape_games.rb @@ -1,5 +1,8 @@ class CreateBreakEscapeGames < ActiveRecord::Migration[7.0] def change + # Detect database adapter + is_postgresql = ActiveRecord::Base.connection.adapter_name.downcase == 'postgresql' + create_table :break_escape_games do |t| # Polymorphic player t.references :player, polymorphic: true, null: false, index: true @@ -8,22 +11,44 @@ class CreateBreakEscapeGames < ActiveRecord::Migration[7.0] t.references :mission, null: false, foreign_key: { to_table: :break_escape_missions } # Scenario snapshot (ERB-generated) - t.jsonb :scenario_data, null: false + # Use jsonb for PostgreSQL, json for SQLite + if is_postgresql + t.jsonb :scenario_data, null: false + else + t.json :scenario_data, null: false + end # Player state - t.jsonb :player_state, null: false, default: { - currentRoom: nil, - unlockedRooms: [], - unlockedObjects: [], - inventory: [], - encounteredNPCs: [], - globalVariables: {}, - biometricSamples: [], - biometricUnlocks: [], - bluetoothDevices: [], - notes: [], - health: 100 - } + # Use jsonb for PostgreSQL, json for SQLite + if is_postgresql + t.jsonb :player_state, null: false, default: { + currentRoom: nil, + unlockedRooms: [], + unlockedObjects: [], + inventory: [], + encounteredNPCs: [], + globalVariables: {}, + biometricSamples: [], + biometricUnlocks: [], + bluetoothDevices: [], + notes: [], + health: 100 + } + else + t.json :player_state, null: false, default: { + currentRoom: nil, + unlockedRooms: [], + unlockedObjects: [], + inventory: [], + encounteredNPCs: [], + globalVariables: {}, + biometricSamples: [], + biometricUnlocks: [], + bluetoothDevices: [], + notes: [], + health: 100 + }.to_json + end # Metadata t.string :status, default: 'in_progress', null: false @@ -38,8 +63,13 @@ class CreateBreakEscapeGames < ActiveRecord::Migration[7.0] [:player_type, :player_id, :mission_id], unique: true, name: 'index_games_on_player_and_mission' - add_index :break_escape_games, :scenario_data, using: :gin - add_index :break_escape_games, :player_state, using: :gin + + # GIN indexes only available in PostgreSQL + if is_postgresql + add_index :break_escape_games, :scenario_data, using: :gin + add_index :break_escape_games, :player_state, using: :gin + end + add_index :break_escape_games, :status end end diff --git a/test/dummy/config/initializers/assets.rb b/test/dummy/config/initializers/assets.rb index bd5bcd2..c71ba13 100644 --- a/test/dummy/config/initializers/assets.rb +++ b/test/dummy/config/initializers/assets.rb @@ -1,12 +1,5 @@ # Be sure to restart your server when you modify this file. -# Version of your assets, change this if you want to expire all your assets. -Rails.application.config.assets.version = "1.0" - -# Add additional assets to the asset load path. -# Rails.application.config.assets.paths << Emoji.images_path - -# Precompile additional assets. -# application.js, application.css, and all non-JS/CSS in the app/assets -# folder are already added. -# Rails.application.config.assets.precompile += %w[ admin.js admin.css ] +# Asset pipeline configuration removed - Rails 8 uses Propshaft instead of Sprockets +# For Rails engine testing, asset configuration is not required +# The engine serves static assets from public/break_escape/ diff --git a/test/dummy/db/schema.rb b/test/dummy/db/schema.rb new file mode 100644 index 0000000..52bf4c0 --- /dev/null +++ b/test/dummy/db/schema.rb @@ -0,0 +1,53 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# This file is the source Rails uses to define your schema when running `bin/rails +# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to +# be faster and is potentially less error prone than running all of your +# migrations from scratch. Old migrations may fail to apply correctly if those +# migrations use external dependencies or application code. +# +# It's strongly recommended that you check this file into your version control system. + +ActiveRecord::Schema[8.1].define(version: 2025_11_20_160000) do + create_table "break_escape_demo_users", force: :cascade do |t| + t.datetime "created_at", null: false + t.string "handle", null: false + t.string "role", default: "user", null: false + t.datetime "updated_at", null: false + t.index ["handle"], name: "index_break_escape_demo_users_on_handle", unique: true + end + + create_table "break_escape_games", force: :cascade do |t| + t.datetime "completed_at" + t.datetime "created_at", null: false + t.integer "mission_id", null: false + t.integer "player_id", null: false + t.json "player_state", default: "{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}", null: false + t.string "player_type", null: false + t.json "scenario_data", null: false + t.integer "score", default: 0, null: false + t.datetime "started_at" + t.string "status", default: "in_progress", null: false + t.datetime "updated_at", null: false + t.index ["mission_id"], name: "index_break_escape_games_on_mission_id" + t.index ["player_type", "player_id", "mission_id"], name: "index_games_on_player_and_mission", unique: true + t.index ["player_type", "player_id"], name: "index_break_escape_games_on_player" + t.index ["status"], name: "index_break_escape_games_on_status" + end + + create_table "break_escape_missions", force: :cascade do |t| + t.datetime "created_at", null: false + t.text "description" + t.integer "difficulty_level", default: 1, null: false + t.string "display_name", null: false + t.string "name", null: false + t.boolean "published", default: false, null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_break_escape_missions_on_name", unique: true + t.index ["published"], name: "index_break_escape_missions_on_published" + end + + add_foreign_key "break_escape_games", "break_escape_missions", column: "mission_id" +end diff --git a/test/dummy/log/test.log b/test/dummy/log/test.log new file mode 100644 index 0000000..fa90e53 --- /dev/null +++ b/test/dummy/log/test.log @@ -0,0 +1,1303 @@ +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. +  (3.4ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY) +  (0.2ms) CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) + ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Create (5.2ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'test', '2025-11-20 17:13:54.117520', '2025-11-20 17:13:54.117523') RETURNING "key" + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Migrating to CreateBreakEscapeMissions (20251120155357) + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.6ms) CREATE TABLE "break_escape_missions" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar NOT NULL, "display_name" varchar NOT NULL, "description" text, "published" boolean DEFAULT FALSE NOT NULL, "difficulty_level" integer DEFAULT 1 NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE UNIQUE INDEX "index_break_escape_missions_on_name" ON "break_escape_missions" ("name") +  (0.1ms) CREATE INDEX "index_break_escape_missions_on_published" ON "break_escape_missions" ("published") + ActiveRecord::SchemaMigration Create (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20251120155357') RETURNING "version" + TRANSACTION (0.1ms) COMMIT TRANSACTION +Migrating to CreateBreakEscapeGames (20251120155358) +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::SchemaMigration Load (0.4ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.2ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Migrating to CreateBreakEscapeGames (20251120155358) + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "player_type" varchar NOT NULL, "player_id" integer NOT NULL, "mission_id" integer NOT NULL, "scenario_data" json NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "status" varchar DEFAULT 'in_progress' NOT NULL, "started_at" datetime(6), "completed_at" datetime(6), "score" integer DEFAULT 0 NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, CONSTRAINT "fk_rails_ce758a8dd4" +FOREIGN KEY ("mission_id") + REFERENCES "break_escape_missions" ("id") +) +  (0.1ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.1ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") + ActiveRecord::SchemaMigration Create (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20251120155358') RETURNING "version" + TRANSACTION (5.3ms) COMMIT TRANSACTION +Migrating to CreateBreakEscapeDemoUsers (20251120160000) + TRANSACTION (0.0ms) BEGIN immediate TRANSACTION +  (0.3ms) CREATE TABLE "break_escape_demo_users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "handle" varchar NOT NULL, "role" varchar DEFAULT 'user' NOT NULL, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.2ms) CREATE UNIQUE INDEX "index_break_escape_demo_users_on_handle" ON "break_escape_demo_users" ("handle") + ActiveRecord::SchemaMigration Create (0.1ms) INSERT INTO "schema_migrations" ("version") VALUES ('20251120160000') RETURNING "version" + TRANSACTION (0.1ms) COMMIT TRANSACTION + ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. +  (1.2ms) DROP TABLE IF EXISTS "break_escape_demo_users" +  (3.7ms) CREATE TABLE "break_escape_demo_users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime(6) NOT NULL, "handle" varchar NOT NULL, "role" varchar DEFAULT 'user' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.2ms) CREATE UNIQUE INDEX "index_break_escape_demo_users_on_handle" ON "break_escape_demo_users" ("handle") +  (0.1ms) DROP TABLE IF EXISTS "break_escape_games" +  (0.3ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.2ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.3ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.2ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.2ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") +  (0.1ms) DROP TABLE IF EXISTS "break_escape_missions" +  (0.3ms) CREATE TABLE "break_escape_missions" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime(6) NOT NULL, "description" text, "difficulty_level" integer DEFAULT 1 NOT NULL, "display_name" varchar NOT NULL, "name" varchar NOT NULL, "published" boolean DEFAULT FALSE NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.3ms) CREATE UNIQUE INDEX "index_break_escape_missions_on_name" ON "break_escape_missions" ("name") +  (0.2ms) CREATE INDEX "index_break_escape_missions_on_published" ON "break_escape_missions" ("published") +  (0.1ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) CREATE TEMPORARY TABLE "abreak_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_status" ON "abreak_escape_games" ("status") +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_player" ON "abreak_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE UNIQUE INDEX "tindex_games_on_player_and_mission" ON "abreak_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_mission_id" ON "abreak_escape_games" ("mission_id") + SQL (0.4ms) INSERT INTO "abreak_escape_games" ("id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at") + SELECT "id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at" FROM "break_escape_games" +  (0.4ms) DROP TABLE "break_escape_games" +  (0.2ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL, CONSTRAINT "fk_rails_ce758a8dd4" +FOREIGN KEY ("mission_id") + REFERENCES "break_escape_missions" ("id") +) +  (0.1ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.1ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") + SQL (0.1ms) INSERT INTO "break_escape_games" ("id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at") + SELECT "id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at" FROM "abreak_escape_games" +  (0.2ms) DROP TABLE "abreak_escape_games" + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 +  (0.2ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY) + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +  (0.2ms) INSERT INTO "schema_migrations" (version) VALUES (20251120160000) +  (0.1ms) INSERT INTO "schema_migrations" (version) VALUES +(20251120155358), +(20251120155357); +  (0.3ms) CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Create (0.3ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'test', '2025-11-20 17:15:26.896212', '2025-11-20 17:15:26.896218') RETURNING "key" + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::InternalMetadata Create (0.3ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '33181f3d58f9bab484a9b348ce1e6b298e81ba9b', '2025-11-20 17:15:26.897909', '2025-11-20 17:15:26.897911') RETURNING "key" + ActiveRecord::SchemaMigration Load (0.6ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.4ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (149617800, '2025-11-20 17:15:27.433387', 'test_user', 'user', '2025-11-20 17:15:27.433387'), (618102942, '2025-11-20 17:15:27.433387', 'other_user', 'user', '2025-11-20 17:15:27.433387'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (223060831, NULL, '2025-11-20 17:15:27.438207', 418560898, 149617800, '{"currentRoom":"reception","unlockedRooms":["reception"]}', 'BreakEscape::DemoUser', '{"startRoom":"reception","rooms":{}}', 0, NULL, 'in_progress', '2025-11-20 17:15:27.438207'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (418560898, '2025-11-20 17:15:27.442020', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:15:27.442020'), (636030761, '2025-11-20 17:15:27.442020', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:15:27.442020') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (4.9ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_presence_of_name +--------------------------------------------------------------- + BreakEscape::Mission Exists? (0.3ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" IS NULL LIMIT ? [["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +------------------------------------------------------------------------------ +BreakEscape::MissionTest: test_published_scope_returns_only_published_missions +------------------------------------------------------------------------------ + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_scenario_path_returns_correct_path +----------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_uniqueness_of_name +----------------------------------------------------------------- + TRANSACTION (0.1ms) SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.4ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + BreakEscape::Mission Create (0.4ms) INSERT INTO "break_escape_missions" ("created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING "id" [["created_at", "2025-11-20 17:15:27.595654"], ["description", nil], ["difficulty_level", 1], ["display_name", "Test"], ["name", "test"], ["published", 0], ["updated_at", "2025-11-20 17:15:27.595654"]] + TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (1.8ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------- +BreakEscapeTest: test_it_has_a_version_number +--------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_get_index +---------------------------------------------------------- +Started GET "/break_escape/missions" for 127.0.0.1 at 2025-11-20 17:15:27 +0000 +Processing by BreakEscape::MissionsController#index as HTML +Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_show_published_mission +----------------------------------------------------------------------- + BreakEscape::Mission Load (0.3ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] +Started GET "/break_escape/missions/418560898" for 127.0.0.1 at 2025-11-20 17:15:28 +0000 +Processing by BreakEscape::MissionsController#show as HTML + Parameters: {"id"=>"418560898"} + BreakEscape::Mission Load (0.2ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] +Completed 500 Internal Server Error in 14ms (ActiveRecord: 0.1ms (1 query, 0 cached) | GC: 10.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +------------------------------------------------ +BreakEscape::GameTest: test_should_update_health +------------------------------------------------ + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::GameTest: test_should_belong_to_player_and_mission +--------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +-------------------------------------------------- +BreakEscape::GameTest: test_should_track_inventory +-------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::GameTest: test_should_clamp_health_between_0_and_100 +----------------------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +---------------------------------------------- +BreakEscape::GameTest: test_should_unlock_room +---------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.4ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, NULL, 'test_user', 'user', NULL), (NULL, NULL, 'other_user', 'user', NULL); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, NULL, 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, NULL, 'in_progress', NULL); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, NULL, 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, NULL), (NULL, NULL, 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, NULL) +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.0ms) ROLLBACK TRANSACTION +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (5.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.1ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.2ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.4ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_games"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'test_user', 'user', '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'other_user', 'user', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_games" ("id", "completed_at", "created_at", "mission_id", "player_id", "player_state", "player_type", "scenario_data", "score", "started_at", "status", "updated_at") VALUES (NULL, NULL, '2025-11-20 17:20:11', 418560898, 149617800, '"{\"currentRoom\": \"reception\", \"unlockedRooms\": [\"reception\"], \"unlockedObjects\": [], \"inventory\": [], \"encounteredNPCs\": [], \"globalVariables\": {}, \"biometricSamples\": [], \"biometricUnlocks\": [], \"bluetoothDevices\": [], \"notes\": [], \"health\": 100}"', 'BreakEscape::DemoUser', '"{\"startRoom\": \"reception\", \"rooms\": {}}"', 0, '2025-11-20 17:20:11', 'in_progress', '2025-11-20 17:20:11'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:20:11', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:20:11'), (NULL, '2025-11-20 17:20:11', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:20:11') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.5ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:12', 'test_user', 'user', '2025-11-20 17:21:12'), (NULL, '2025-11-20 17:21:12', 'other_user', 'user', '2025-11-20 17:21:12'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:12', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:12'), (NULL, '2025-11-20 17:21:12', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:12') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (5.0ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.1ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.0ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'test_user', 'user', '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'other_user', 'user', '2025-11-20 17:21:13'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:21:13', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:21:13'), (NULL, '2025-11-20 17:21:13', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:21:13') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'test_user', 'user', '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'other_user', 'user', '2025-11-20 17:22:17'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:17') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (5.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'test_user', 'user', '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'other_user', 'user', '2025-11-20 17:22:17'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:17') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'test_user', 'user', '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'other_user', 'user', '2025-11-20 17:22:17'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:17') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.0ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'test_user', 'user', '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'other_user', 'user', '2025-11-20 17:22:17'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:17') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'test_user', 'user', '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'other_user', 'user', '2025-11-20 17:22:17'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:17', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:17'), (NULL, '2025-11-20 17:22:17', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:17') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.1ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.1ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.1ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.4ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.2ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'test_user', 'user', '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'other_user', 'user', '2025-11-20 17:22:18'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:22:18', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:22:18'), (NULL, '2025-11-20 17:22:18', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:22:18') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::SchemaMigration Load (0.5ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.2ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] +  (4.9ms) DROP TABLE IF EXISTS "break_escape_demo_users" +  (0.2ms) CREATE TABLE "break_escape_demo_users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime(6) NOT NULL, "handle" varchar NOT NULL, "role" varchar DEFAULT 'user' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.2ms) CREATE UNIQUE INDEX "index_break_escape_demo_users_on_handle" ON "break_escape_demo_users" ("handle") +  (0.4ms) DROP TABLE IF EXISTS "break_escape_games" +  (0.2ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.1ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") +  (0.2ms) DROP TABLE IF EXISTS "break_escape_missions" +  (0.2ms) CREATE TABLE "break_escape_missions" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime(6) NOT NULL, "description" text, "difficulty_level" integer DEFAULT 1 NOT NULL, "display_name" varchar NOT NULL, "name" varchar NOT NULL, "published" boolean DEFAULT FALSE NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE UNIQUE INDEX "index_break_escape_missions_on_name" ON "break_escape_missions" ("name") +  (0.1ms) CREATE INDEX "index_break_escape_missions_on_published" ON "break_escape_missions" ("published") +  (0.1ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + TRANSACTION (0.0ms) BEGIN immediate TRANSACTION +  (0.2ms) CREATE TEMPORARY TABLE "abreak_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_status" ON "abreak_escape_games" ("status") +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_player" ON "abreak_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE UNIQUE INDEX "tindex_games_on_player_and_mission" ON "abreak_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_mission_id" ON "abreak_escape_games" ("mission_id") + SQL (0.1ms) INSERT INTO "abreak_escape_games" ("id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at") + SELECT "id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at" FROM "break_escape_games" +  (0.2ms) DROP TABLE "break_escape_games" +  (0.1ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL, CONSTRAINT "fk_rails_ce758a8dd4" +FOREIGN KEY ("mission_id") + REFERENCES "break_escape_missions" ("id") +) +  (0.1ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.1ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") + SQL (0.1ms) INSERT INTO "break_escape_games" ("id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at") + SELECT "id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at" FROM "abreak_escape_games" +  (0.1ms) DROP TABLE "abreak_escape_games" + TRANSACTION (0.2ms) COMMIT TRANSACTION +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + ActiveRecord::SchemaMigration Load (0.1ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.0ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. +  (1.1ms) DROP TABLE IF EXISTS "break_escape_demo_users" +  (3.7ms) CREATE TABLE "break_escape_demo_users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime(6) NOT NULL, "handle" varchar NOT NULL, "role" varchar DEFAULT 'user' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.2ms) CREATE UNIQUE INDEX "index_break_escape_demo_users_on_handle" ON "break_escape_demo_users" ("handle") +  (0.1ms) DROP TABLE IF EXISTS "break_escape_games" +  (0.2ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.1ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.2ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") +  (0.1ms) DROP TABLE IF EXISTS "break_escape_missions" +  (0.2ms) CREATE TABLE "break_escape_missions" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "created_at" datetime(6) NOT NULL, "description" text, "difficulty_level" integer DEFAULT 1 NOT NULL, "display_name" varchar NOT NULL, "name" varchar NOT NULL, "published" boolean DEFAULT FALSE NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.2ms) CREATE UNIQUE INDEX "index_break_escape_missions_on_name" ON "break_escape_missions" ("name") +  (0.2ms) CREATE INDEX "index_break_escape_missions_on_published" ON "break_escape_missions" ("published") +  (0.0ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + TRANSACTION (0.0ms) BEGIN immediate TRANSACTION +  (0.2ms) CREATE TEMPORARY TABLE "abreak_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL) +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_status" ON "abreak_escape_games" ("status") +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_player" ON "abreak_escape_games" ("player_type", "player_id") +  (0.2ms) CREATE UNIQUE INDEX "tindex_games_on_player_and_mission" ON "abreak_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "tindex_abreak_escape_games_on_mission_id" ON "abreak_escape_games" ("mission_id") + SQL (0.2ms) INSERT INTO "abreak_escape_games" ("id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at") + SELECT "id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at" FROM "break_escape_games" +  (0.4ms) DROP TABLE "break_escape_games" +  (0.2ms) CREATE TABLE "break_escape_games" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "completed_at" datetime(6), "created_at" datetime(6) NOT NULL, "mission_id" integer NOT NULL, "player_id" integer NOT NULL, "player_state" json DEFAULT '"{\"currentRoom\":null,\"unlockedRooms\":[],\"unlockedObjects\":[],\"inventory\":[],\"encounteredNPCs\":[],\"globalVariables\":{},\"biometricSamples\":[],\"biometricUnlocks\":[],\"bluetoothDevices\":[],\"notes\":[],\"health\":100}"' NOT NULL, "player_type" varchar NOT NULL, "scenario_data" json NOT NULL, "score" integer DEFAULT 0 NOT NULL, "started_at" datetime(6), "status" varchar DEFAULT 'in_progress' NOT NULL, "updated_at" datetime(6) NOT NULL, CONSTRAINT "fk_rails_ce758a8dd4" +FOREIGN KEY ("mission_id") + REFERENCES "break_escape_missions" ("id") +) +  (0.1ms) CREATE INDEX "index_break_escape_games_on_mission_id" ON "break_escape_games" ("mission_id") +  (0.1ms) CREATE UNIQUE INDEX "index_games_on_player_and_mission" ON "break_escape_games" ("player_type", "player_id", "mission_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_player" ON "break_escape_games" ("player_type", "player_id") +  (0.1ms) CREATE INDEX "index_break_escape_games_on_status" ON "break_escape_games" ("status") + SQL (0.7ms) INSERT INTO "break_escape_games" ("id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at") + SELECT "id","completed_at","created_at","mission_id","player_id","player_state","player_type","scenario_data","score","started_at","status","updated_at" FROM "abreak_escape_games" +  (0.2ms) DROP TABLE "abreak_escape_games" + TRANSACTION (0.1ms) COMMIT TRANSACTION +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 +  (0.2ms) CREATE TABLE "schema_migrations" ("version" varchar NOT NULL PRIMARY KEY) + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC +  (0.2ms) INSERT INTO "schema_migrations" (version) VALUES (20251120160000) +  (0.3ms) INSERT INTO "schema_migrations" (version) VALUES +(20251120155358), +(20251120155357); +  (0.3ms) CREATE TABLE "ar_internal_metadata" ("key" varchar NOT NULL PRIMARY KEY, "value" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL) + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Create (0.2ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('environment', 'test', '2025-11-20 17:23:21.162347', '2025-11-20 17:23:21.162351') RETURNING "key" + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "environment"]] + ActiveRecord::InternalMetadata Load (0.1ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::InternalMetadata Create (0.1ms) INSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ('schema_sha1', '33181f3d58f9bab484a9b348ce1e6b298e81ba9b', '2025-11-20 17:23:21.163822', '2025-11-20 17:23:21.163824') RETURNING "key" + ActiveRecord::SchemaMigration Load (0.6ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.3ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:23:21', 'test_user', 'user', '2025-11-20 17:23:21'), (NULL, '2025-11-20 17:23:21', 'other_user', 'user', '2025-11-20 17:23:21'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:23:21', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:23:21'), (NULL, '2025-11-20 17:23:21', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:23:21') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (3.5ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_get_index +---------------------------------------------------------- +Started GET "/break_escape/missions" for 127.0.0.1 at 2025-11-20 17:23:22 +0000 +Processing by BreakEscape::MissionsController#index as HTML +Completed 500 Internal Server Error in 43ms (ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_show_published_mission +----------------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +------------------------------------------------ +BreakEscape::GameTest: test_should_update_health +------------------------------------------------ + TRANSACTION (0.1ms) ROLLBACK TRANSACTION +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.5ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.3ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:24:03', 'test_user', 'user', '2025-11-20 17:24:03'), (NULL, '2025-11-20 17:24:03', 'other_user', 'user', '2025-11-20 17:24:03'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:24:03', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:24:03'), (NULL, '2025-11-20 17:24:03', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:24:03') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (5.3ms) COMMIT TRANSACTION +  (0.2ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_presence_of_name +--------------------------------------------------------------- + BreakEscape::Mission Exists? (0.2ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" IS NULL LIMIT ? [["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_uniqueness_of_name +----------------------------------------------------------------- + TRANSACTION (0.1ms) SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.3ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + BreakEscape::Mission Create (0.2ms) INSERT INTO "break_escape_missions" ("created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING "id" [["created_at", "2025-11-20 17:24:03.653615"], ["description", nil], ["difficulty_level", 1], ["display_name", "Test"], ["name", "test"], ["published", 0], ["updated_at", "2025-11-20 17:24:03.653615"]] + TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.1ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +------------------------------------------------------------------------------ +BreakEscape::MissionTest: test_published_scope_returns_only_published_missions +------------------------------------------------------------------------------ + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_scenario_path_returns_correct_path +----------------------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_get_index +---------------------------------------------------------- +Started GET "/break_escape/missions" for 127.0.0.1 at 2025-11-20 17:24:04 +0000 +Processing by BreakEscape::MissionsController#index as HTML + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" ORDER BY "break_escape_demo_users"."id" ASC LIMIT ? [["LIMIT", 1]] + Rendering layout /home/user/BreakEscape/app/views/layouts/break_escape/application.html.erb + Rendering /home/user/BreakEscape/app/views/break_escape/missions/index.html.erb within layouts/break_escape/application + BreakEscape::Mission Load (0.4ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."published" = ? [["published", 1]] + Rendered /home/user/BreakEscape/app/views/break_escape/missions/index.html.erb within layouts/break_escape/application (Duration: 2.9ms | GC: 0.0ms) + Rendered layout /home/user/BreakEscape/app/views/layouts/break_escape/application.html.erb (Duration: 3.8ms | GC: 0.0ms) +Completed 200 OK in 62ms (Views: 19.1ms | ActiveRecord: 0.9ms (2 queries, 0 cached) | GC: 0.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_show_published_mission +----------------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------- +BreakEscapeTest: test_it_has_a_version_number +--------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +-------------------------------------------------- +BreakEscape::GameTest: test_should_track_inventory +-------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------- +BreakEscape::GameTest: test_should_unlock_room +---------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +------------------------------------------------ +BreakEscape::GameTest: test_should_update_health +------------------------------------------------ + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::GameTest: test_should_belong_to_player_and_mission +--------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::GameTest: test_should_clamp_health_between_0_and_100 +----------------------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.5ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.2ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.5ms) PRAGMA foreign_keys +  (0.1ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.1ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (NULL, '2025-11-20 17:24:29', 'test_user', 'user', '2025-11-20 17:24:29'), (NULL, '2025-11-20 17:24:29', 'other_user', 'user', '2025-11-20 17:24:29'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (NULL, '2025-11-20 17:24:29', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:24:29'), (NULL, '2025-11-20 17:24:29', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:24:29') +  (0.1ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (4.6ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_presence_of_name +--------------------------------------------------------------- + BreakEscape::Mission Exists? (0.2ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" IS NULL LIMIT ? [["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_uniqueness_of_name +----------------------------------------------------------------- + TRANSACTION (0.1ms) SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.3ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + BreakEscape::Mission Create (0.3ms) INSERT INTO "break_escape_missions" ("created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING "id" [["created_at", "2025-11-20 17:24:30.005081"], ["description", nil], ["difficulty_level", 1], ["display_name", "Test"], ["name", "test"], ["published", 0], ["updated_at", "2025-11-20 17:24:30.005081"]] + TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.1ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_scenario_path_returns_correct_path +----------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +------------------------------------------------------------------------------ +BreakEscape::MissionTest: test_published_scope_returns_only_published_missions +------------------------------------------------------------------------------ + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------- +BreakEscapeTest: test_it_has_a_version_number +--------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_show_published_mission +----------------------------------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.4ms) BEGIN deferred TRANSACTION +---------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_get_index +---------------------------------------------------------- +Started GET "/break_escape/missions" for 127.0.0.1 at 2025-11-20 17:24:30 +0000 +Processing by BreakEscape::MissionsController#index as HTML + BreakEscape::DemoUser Load (0.2ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" ORDER BY "break_escape_demo_users"."id" ASC LIMIT ? [["LIMIT", 1]] + Rendering layout /home/user/BreakEscape/app/views/layouts/break_escape/application.html.erb + Rendering /home/user/BreakEscape/app/views/break_escape/missions/index.html.erb within layouts/break_escape/application + BreakEscape::Mission Load (0.2ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."published" = ? [["published", 1]] + Rendered /home/user/BreakEscape/app/views/break_escape/missions/index.html.erb within layouts/break_escape/application (Duration: 2.2ms | GC: 0.0ms) + Rendered layout /home/user/BreakEscape/app/views/layouts/break_escape/application.html.erb (Duration: 3.2ms | GC: 0.0ms) +Completed 200 OK in 57ms (Views: 17.5ms | ActiveRecord: 0.7ms (2 queries, 0 cached) | GC: 0.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------- +BreakEscape::GameTest: test_should_unlock_room +---------------------------------------------- + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +------------------------------------------------ +BreakEscape::GameTest: test_should_update_health +------------------------------------------------ + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +-------------------------------------------------- +BreakEscape::GameTest: test_should_track_inventory +-------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::GameTest: test_should_clamp_health_between_0_and_100 +----------------------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::GameTest: test_should_belong_to_player_and_mission +--------------------------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION +Generating image variants require the image_processing gem. Please add `gem "image_processing", "~> 1.2"` to your Gemfile or set `config.active_storage.variant_processor = :disabled`. + ActiveRecord::InternalMetadata Load (0.6ms) SELECT * FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = ? ORDER BY "ar_internal_metadata"."key" ASC LIMIT 1 [[nil, "schema_sha1"]] + ActiveRecord::SchemaMigration Load (0.3ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC + TRANSACTION (0.1ms) BEGIN immediate TRANSACTION +  (0.4ms) PRAGMA foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys +  (0.0ms) PRAGMA defer_foreign_keys = ON +  (0.0ms) PRAGMA foreign_keys = OFF + Fixtures Load (0.2ms) DELETE FROM "break_escape_demo_users"; +DELETE FROM "break_escape_missions"; +INSERT INTO "break_escape_demo_users" ("id", "created_at", "handle", "role", "updated_at") VALUES (149617800, '2025-11-20 17:25:07', 'test_user', 'user', '2025-11-20 17:25:07'), (618102942, '2025-11-20 17:25:07', 'other_user', 'user', '2025-11-20 17:25:07'); +INSERT INTO "break_escape_missions" ("id", "created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (418560898, '2025-11-20 17:25:07', 'Test scenario', 3, 'CEO Exfiltration', 'ceo_exfil', TRUE, '2025-11-20 17:25:07'), (636030761, '2025-11-20 17:25:07', 'Not visible', 1, 'Unpublished Test', 'test_unpublished', FALSE, '2025-11-20 17:25:07') +  (0.0ms) PRAGMA defer_foreign_keys = 0 +  (0.0ms) PRAGMA foreign_keys = 1 + TRANSACTION (54.5ms) COMMIT TRANSACTION +  (0.1ms) PRAGMA foreign_key_check + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_scenario_path_returns_correct_path +----------------------------------------------------------------- + BreakEscape::Mission Load (0.3ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +------------------------------------------------------------------------------ +BreakEscape::MissionTest: test_published_scope_returns_only_published_missions +------------------------------------------------------------------------------ + BreakEscape::Mission Load (0.2ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::Mission Exists? (0.1ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."published" = ? AND "break_escape_missions"."id" = ? LIMIT ? [["published", 1], ["id", 418560898], ["LIMIT", 1]] + BreakEscape::Mission Load (0.1ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 636030761], ["LIMIT", 1]] + BreakEscape::Mission Exists? (0.1ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."published" = ? AND "break_escape_missions"."id" = ? LIMIT ? [["published", 1], ["id", 636030761], ["LIMIT", 1]] + TRANSACTION (0.0ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_presence_of_name +--------------------------------------------------------------- + BreakEscape::Mission Exists? (0.1ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" IS NULL LIMIT ? [["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::MissionTest: test_should_validate_uniqueness_of_name +----------------------------------------------------------------- + TRANSACTION (0.0ms) SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.3ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + BreakEscape::Mission Create (0.2ms) INSERT INTO "break_escape_missions" ("created_at", "description", "difficulty_level", "display_name", "name", "published", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) RETURNING "id" [["created_at", "2025-11-20 17:25:07.298681"], ["description", nil], ["difficulty_level", 1], ["display_name", "Test"], ["name", "test"], ["published", 0], ["updated_at", "2025-11-20 17:25:07.298681"]] + TRANSACTION (0.0ms) RELEASE SAVEPOINT active_record_1 + BreakEscape::Mission Exists? (0.1ms) SELECT 1 AS one FROM "break_escape_missions" WHERE "break_escape_missions"."name" = ? LIMIT ? [["name", "test"], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_get_index +---------------------------------------------------------- +Started GET "/break_escape/missions" for 127.0.0.1 at 2025-11-20 17:25:07 +0000 +Processing by BreakEscape::MissionsController#index as HTML + BreakEscape::DemoUser Load (0.2ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" ORDER BY "break_escape_demo_users"."id" ASC LIMIT ? [["LIMIT", 1]] + Rendering layout /home/user/BreakEscape/app/views/layouts/break_escape/application.html.erb + Rendering /home/user/BreakEscape/app/views/break_escape/missions/index.html.erb within layouts/break_escape/application + BreakEscape::Mission Load (0.3ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."published" = ? [["published", 1]] + Rendered /home/user/BreakEscape/app/views/break_escape/missions/index.html.erb within layouts/break_escape/application (Duration: 2.4ms | GC: 0.0ms) + Rendered layout /home/user/BreakEscape/app/views/layouts/break_escape/application.html.erb (Duration: 3.3ms | GC: 0.0ms) +Completed 200 OK in 56ms (Views: 17.6ms | ActiveRecord: 0.5ms (2 queries, 0 cached) | GC: 0.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------------- +BreakEscape::MissionsControllerTest: test_should_show_published_mission +----------------------------------------------------------------------- + BreakEscape::Mission Load (0.1ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] +Started GET "/break_escape/missions/418560898" for 127.0.0.1 at 2025-11-20 17:25:07 +0000 +Processing by BreakEscape::MissionsController#show as HTML + Parameters: {"id"=>"418560898"} + BreakEscape::Mission Load (0.1ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" ORDER BY "break_escape_demo_users"."id" ASC LIMIT ? [["LIMIT", 1]] + BreakEscape::Game Load (0.2ms) SELECT "break_escape_games".* FROM "break_escape_games" WHERE "break_escape_games"."player_type" = ? AND "break_escape_games"."player_id" = ? AND "break_escape_games"."mission_id" = ? LIMIT ? [["player_type", "BreakEscape::DemoUser"], ["player_id", 149617800], ["mission_id", 418560898], ["LIMIT", 1]] + TRANSACTION (0.1ms) SAVEPOINT active_record_1 + TRANSACTION (0.1ms) ROLLBACK TO SAVEPOINT active_record_1 +Completed 500 Internal Server Error in 56ms (ActiveRecord: 1.0ms (3 queries, 0 cached) | GC: 0.0ms) + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +----------------------------------------------------------------- +BreakEscape::GameTest: test_should_clamp_health_between_0_and_100 +----------------------------------------------------------------- + BreakEscape::Mission Load (0.2ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" WHERE "break_escape_demo_users"."id" = ? LIMIT ? [["id", 149617800], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.0ms) BEGIN deferred TRANSACTION +------------------------------------------------ +BreakEscape::GameTest: test_should_update_health +------------------------------------------------ + BreakEscape::Mission Load (0.1ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" WHERE "break_escape_demo_users"."id" = ? LIMIT ? [["id", 149617800], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------------------------- +BreakEscape::GameTest: test_should_belong_to_player_and_mission +--------------------------------------------------------------- + BreakEscape::Mission Load (0.1ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" WHERE "break_escape_demo_users"."id" = ? LIMIT ? [["id", 149617800], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +-------------------------------------------------- +BreakEscape::GameTest: test_should_track_inventory +-------------------------------------------------- + BreakEscape::Mission Load (0.2ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" WHERE "break_escape_demo_users"."id" = ? LIMIT ? [["id", 149617800], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +---------------------------------------------- +BreakEscape::GameTest: test_should_unlock_room +---------------------------------------------- + BreakEscape::Mission Load (0.1ms) SELECT "break_escape_missions".* FROM "break_escape_missions" WHERE "break_escape_missions"."id" = ? LIMIT ? [["id", 418560898], ["LIMIT", 1]] + BreakEscape::DemoUser Load (0.1ms) SELECT "break_escape_demo_users".* FROM "break_escape_demo_users" WHERE "break_escape_demo_users"."id" = ? LIMIT ? [["id", 149617800], ["LIMIT", 1]] + TRANSACTION (0.1ms) ROLLBACK TRANSACTION + TRANSACTION (0.1ms) BEGIN deferred TRANSACTION +--------------------------------------------- +BreakEscapeTest: test_it_has_a_version_number +--------------------------------------------- + TRANSACTION (0.0ms) ROLLBACK TRANSACTION diff --git a/test/dummy/storage/test.sqlite3 b/test/dummy/storage/test.sqlite3 new file mode 100644 index 0000000..1f0d1e0 Binary files /dev/null and b/test/dummy/storage/test.sqlite3 differ diff --git a/test/dummy/tmp/local_secret.txt b/test/dummy/tmp/local_secret.txt new file mode 100644 index 0000000..eae2170 --- /dev/null +++ b/test/dummy/tmp/local_secret.txt @@ -0,0 +1 @@ +022d8111afae5d7b817e22ced18d14e9fbbfc47836a0997a9df1dd5463dec5baddf264a995609fc7474d10805f47cf8860d3653f4baf680b5ae7415a9a92415b \ No newline at end of file diff --git a/test/fixtures/break_escape/demo_users.yml b/test/fixtures/break_escape/demo_users.yml deleted file mode 100644 index 91817ef..0000000 --- a/test/fixtures/break_escape/demo_users.yml +++ /dev/null @@ -1,5 +0,0 @@ -test_user: - handle: test_user - -other_user: - handle: other_user diff --git a/test/fixtures/break_escape/games.yml b/test/fixtures/break_escape/games.yml deleted file mode 100644 index 0e88335..0000000 --- a/test/fixtures/break_escape/games.yml +++ /dev/null @@ -1,7 +0,0 @@ -active_game: - player: test_user (BreakEscape::DemoUser) - mission: ceo_exfil - scenario_data: { "startRoom": "reception", "rooms": {} } - player_state: { "currentRoom": "reception", "unlockedRooms": ["reception"] } - status: in_progress - score: 0 diff --git a/test/fixtures/break_escape_demo_users.yml b/test/fixtures/break_escape_demo_users.yml new file mode 100644 index 0000000..3222fca --- /dev/null +++ b/test/fixtures/break_escape_demo_users.yml @@ -0,0 +1,9 @@ +test_user: + handle: test_user + created_at: <%= Time.now %> + updated_at: <%= Time.now %> + +other_user: + handle: other_user + created_at: <%= Time.now %> + updated_at: <%= Time.now %> diff --git a/test/fixtures/break_escape/missions.yml b/test/fixtures/break_escape_missions.yml similarity index 69% rename from test/fixtures/break_escape/missions.yml rename to test/fixtures/break_escape_missions.yml index ad2df32..ffd7fb0 100644 --- a/test/fixtures/break_escape/missions.yml +++ b/test/fixtures/break_escape_missions.yml @@ -4,6 +4,8 @@ ceo_exfil: description: Test scenario published: true difficulty_level: 3 + created_at: <%= Time.now %> + updated_at: <%= Time.now %> unpublished: name: test_unpublished @@ -11,3 +13,5 @@ unpublished: description: Not visible published: false difficulty_level: 1 + created_at: <%= Time.now %> + updated_at: <%= Time.now %> diff --git a/test/models/break_escape/game_test.rb b/test/models/break_escape/game_test.rb index 5702a57..e2eedda 100644 --- a/test/models/break_escape/game_test.rb +++ b/test/models/break_escape/game_test.rb @@ -3,7 +3,26 @@ require 'test_helper' module BreakEscape class GameTest < ActiveSupport::TestCase setup do - @game = games(:active_game) + @mission = break_escape_missions(:ceo_exfil) + @player = break_escape_demo_users(:test_user) + @game = Game.create!( + mission: @mission, + player: @player, + scenario_data: { "startRoom" => "reception", "rooms" => {} }, + player_state: { + "currentRoom" => "reception", + "unlockedRooms" => ["reception"], + "unlockedObjects" => [], + "inventory" => [], + "encounteredNPCs" => [], + "globalVariables" => {}, + "biometricSamples" => [], + "biometricUnlocks" => [], + "bluetoothDevices" => [], + "notes" => [], + "health" => 100 + } + ) end test "should belong to player and mission" do diff --git a/test/models/break_escape/mission_test.rb b/test/models/break_escape/mission_test.rb index fa8df8d..a738b85 100644 --- a/test/models/break_escape/mission_test.rb +++ b/test/models/break_escape/mission_test.rb @@ -15,12 +15,12 @@ module BreakEscape end test "published scope returns only published missions" do - assert_includes Mission.published, missions(:ceo_exfil) - assert_not_includes Mission.published, missions(:unpublished) + assert_includes Mission.published, break_escape_missions(:ceo_exfil) + assert_not_includes Mission.published, break_escape_missions(:unpublished) end test "scenario_path returns correct path" do - mission = missions(:ceo_exfil) + mission = break_escape_missions(:ceo_exfil) expected = Rails.root.join('app', 'assets', 'scenarios', 'ceo_exfil') assert_equal expected, mission.scenario_path end diff --git a/test/test_helper.rb b/test/test_helper.rb index cf669c8..8bdd7cc 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,5 +1,6 @@ # Configure Rails Environment ENV["RAILS_ENV"] = "test" +ENV["BREAK_ESCAPE_STANDALONE"] = "true" # Use standalone mode for tests require_relative "../test/dummy/config/environment" ActiveRecord::Migrator.migrations_paths = [ File.expand_path("../test/dummy/db/migrate", __dir__) ] @@ -11,5 +12,18 @@ if ActiveSupport::TestCase.respond_to?(:fixture_paths=) ActiveSupport::TestCase.fixture_paths = [ File.expand_path("fixtures", __dir__) ] ActionDispatch::IntegrationTest.fixture_paths = ActiveSupport::TestCase.fixture_paths ActiveSupport::TestCase.file_fixture_path = File.expand_path("fixtures", __dir__) + "/files" - ActiveSupport::TestCase.fixtures :all + + # Map fixture names to model classes + ActiveSupport::TestCase.set_fixture_class( + break_escape_missions: BreakEscape::Mission, + break_escape_demo_users: BreakEscape::DemoUser + ) + + ActiveSupport::TestCase.fixtures :break_escape_missions, :break_escape_demo_users +end + +# Reload configuration after setting ENV variable +BreakEscape.configure do |config| + config.standalone_mode = true + config.demo_user_handle = 'test_user' end