Commit 31b0e530 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

Introduce NotificationSetting model

It will hold notification setting per group or per project. It will
allow get rid of notification level stored in Member model
Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
parent a9346cab
class NotificationSetting < ActiveRecord::Base
belongs_to :user
belongs_to :source, polymorphic: true
validates :user, presence: true
validates :source, presence: true
validates :level, presence: true
validates :user_id, uniqueness: { scope: [:source_type, :source_id],
message: "already exists in source",
allow_nil: true }
# Notification level
# Note: When adding an option, it MUST go on the end of the array.
enum level: [:disabled, :participating, :watch, :global, :mention]
end
class CreateNotificationSettings < ActiveRecord::Migration
def change
create_table :notification_settings do |t|
t.integer :user_id
t.integer :level
t.integer :source_id
t.string :source_type
t.timestamps null: false
end
end
end
......@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20160320204112) do
ActiveRecord::Schema.define(version: 20160328112808) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
......@@ -417,9 +417,9 @@ ActiveRecord::Schema.define(version: 20160320204112) do
t.string "state"
t.integer "iid"
t.integer "updated_by_id"
t.integer "moved_to_id"
t.boolean "confidential", default: false
t.boolean "confidential", default: false
t.datetime "deleted_at"
t.integer "moved_to_id"
end
add_index "issues", ["assignee_id"], name: "index_issues_on_assignee_id", using: :btree
......@@ -638,6 +638,15 @@ ActiveRecord::Schema.define(version: 20160320204112) do
add_index "notes", ["project_id"], name: "index_notes_on_project_id", using: :btree
add_index "notes", ["updated_at"], name: "index_notes_on_updated_at", using: :btree
create_table "notification_settings", force: :cascade do |t|
t.integer "user_id"
t.integer "level"
t.integer "source_id"
t.string "source_type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "oauth_access_grants", force: :cascade do |t|
t.integer "resource_owner_id", null: false
t.integer "application_id", null: false
......
require 'rails_helper'
RSpec.describe NotificationSetting, type: :model do
describe "Associations" do
it { is_expected.to belong_to(:user) }
end
describe "Validation" do
subject { NotificationSetting.new }
it { is_expected.to validate_presence_of(:user) }
it { is_expected.to validate_presence_of(:source) }
it { is_expected.to validate_presence_of(:level) }
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