Commit 3fdfd27c authored by Bob Van Landuyt's avatar Bob Van Landuyt

Add DesignManagement::Design model

The design model will represent one single file uploaded to a
`DesignCollection` linked to an issue.
parent 11ef6ffc
......@@ -1035,6 +1035,15 @@ ActiveRecord::Schema.define(version: 20190305162221) do
t.index ["project_id", "status"], name: "index_deployments_on_project_id_and_status", using: :btree
end
create_table "design_management_designs", id: :bigserial, force: :cascade do |t|
t.integer "project_id", null: false
t.integer "issue_id", null: false
t.string "filename", null: false
t.index ["issue_id", "filename"], name: "index_design_management_designs_on_issue_id_and_filename", unique: true, using: :btree
t.index ["issue_id"], name: "index_design_management_designs_on_issue_id", unique: true, using: :btree
t.index ["project_id"], name: "index_design_management_designs_on_project_id", using: :btree
end
create_table "draft_notes", id: :bigserial, force: :cascade do |t|
t.integer "merge_request_id", null: false
t.integer "author_id", null: false
......@@ -3405,6 +3414,8 @@ ActiveRecord::Schema.define(version: 20190305162221) do
add_foreign_key "container_repositories", "projects"
add_foreign_key "deploy_keys_projects", "projects", name: "fk_58a901ca7e", on_delete: :cascade
add_foreign_key "deployments", "projects", name: "fk_b9a3851b82", on_delete: :cascade
add_foreign_key "design_management_designs", "issues", on_delete: :cascade
add_foreign_key "design_management_designs", "projects", on_delete: :cascade
add_foreign_key "draft_notes", "merge_requests", on_delete: :cascade
add_foreign_key "draft_notes", "users", column: "author_id", on_delete: :cascade
add_foreign_key "environments", "projects", name: "fk_d1c8c1da6a", on_delete: :cascade
......
# frozen_string_literal: true
module DesignManagement
def self.table_name_prefix
'design_management_'
end
end
# frozen_string_literal: true
module DesignManagement
class Design < ApplicationRecord
belongs_to :project
belongs_to :issue
has_many :versions, class_name: 'DesignManagement::Version', inverse_of: :design
validates :project, :issue, :filename, presence: true
validates :issue, uniqueness: true
validates :filename, uniqueness: { scope: :issue_id }
end
end
class CreateDesigns < ActiveRecord::Migration[5.0]
def change
create_table :design_management_designs, id: :bigserial do |t|
t.references :project, foreign_key: { on_delete: :cascade }, index: true, null: false
t.references :issue, foreign_key: { on_delete: :cascade }, index: { unique: true }, null: false
t.string :filename, null: false
t.index [:issue_id, :filename], unique: true
end
end
end
# frozen_string_literal: true
FactoryBot.define do
factory :design, class: DesignManagement::Design do
issue
project { issue.project }
sequence(:filename) { |n| "homescreen-#{n}.jpg" }
end
end
# frozen_string_literal: true
require 'rails_helper'
describe DesignManagement::Design do
describe 'relations' do
it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:issue) }
it { is_expected.to have_many(:versions) }
end
describe 'validations' do
subject(:design) { build(:design) }
it { is_expected.to be_valid }
it { is_expected.to validate_presence_of(:project) }
it { is_expected.to validate_presence_of(:issue) }
it { is_expected.to validate_presence_of(:filename) }
it { is_expected.to validate_uniqueness_of(:issue) }
it { is_expected.to validate_uniqueness_of(:filename).scoped_to(:issue_id) }
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment