From 2346f03b6ff4348493697b9795db4c20a04c107f Mon Sep 17 00:00:00 2001 From: Maikel Linke Date: Wed, 13 Dec 2023 14:44:19 +1100 Subject: [PATCH] Add ConnectedApp model --- app/models/connected_app.rb | 8 +++++++ .../20231213054115_create_connected_apps.rb | 12 +++++++++++ db/schema.rb | 9 ++++++++ spec/models/connected_app_spec.rb | 21 +++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 app/models/connected_app.rb create mode 100644 db/migrate/20231213054115_create_connected_apps.rb create mode 100644 spec/models/connected_app_spec.rb diff --git a/app/models/connected_app.rb b/app/models/connected_app.rb new file mode 100644 index 0000000000..0553bbffa2 --- /dev/null +++ b/app/models/connected_app.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +# An enterprise can be connected to other apps. +# +# Here we store keys and links to access the app. +class ConnectedApp < ApplicationRecord + belongs_to :enterprise +end diff --git a/db/migrate/20231213054115_create_connected_apps.rb b/db/migrate/20231213054115_create_connected_apps.rb new file mode 100644 index 0000000000..73fcdbf9d6 --- /dev/null +++ b/db/migrate/20231213054115_create_connected_apps.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class CreateConnectedApps < ActiveRecord::Migration[7.0] + def change + create_table :connected_apps do |t| + t.belongs_to :enterprise, foreign_key: true + t.json :data + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 7e782b8747..c73b14ac7a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -63,6 +63,14 @@ ActiveRecord::Schema[7.0].define(version: 20231003000823494) do t.index ["user_id", "action_name", "column_name"], name: "index_column_prefs_on_user_id_and_action_name_and_column_name", unique: true end + create_table "connected_apps", force: :cascade do |t| + t.bigint "enterprise_id" + t.json "data" + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.index ["enterprise_id"], name: "index_connected_apps_on_enterprise_id" + end + create_table "coordinator_fees", id: :serial, force: :cascade do |t| t.integer "order_cycle_id", null: false t.integer "enterprise_fee_id", null: false @@ -1101,6 +1109,7 @@ ActiveRecord::Schema[7.0].define(version: 20231003000823494) do add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id" add_foreign_key "adjustment_metadata", "enterprises", name: "adjustment_metadata_enterprise_id_fk" add_foreign_key "adjustment_metadata", "spree_adjustments", column: "adjustment_id", name: "adjustment_metadata_adjustment_id_fk", on_delete: :cascade + add_foreign_key "connected_apps", "enterprises" add_foreign_key "coordinator_fees", "enterprise_fees", name: "coordinator_fees_enterprise_fee_id_fk" add_foreign_key "coordinator_fees", "order_cycles", name: "coordinator_fees_order_cycle_id_fk" add_foreign_key "custom_tabs", "enterprises", on_delete: :cascade diff --git a/spec/models/connected_app_spec.rb b/spec/models/connected_app_spec.rb new file mode 100644 index 0000000000..57dd56d4c3 --- /dev/null +++ b/spec/models/connected_app_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe ConnectedApp, type: :model do + it { is_expected.to belong_to :enterprise } + + it "stores data as json hash" do + # This functionality is just Rails and would usually not warrant a spec but + # it's the first time we use the json datatype in this codebase and + # therefore it's a nice example to see how it works. + expect(subject.data).to eq nil + + subject.enterprise = create(:enterprise) + subject.data = { link: "https://example.net" } + subject.save! + subject.reload + + expect(subject.data).to eq({ "link" => "https://example.net" }) + end +end