Commit 20714ee9 authored by Matija Čupić's avatar Matija Čupić

Change UserCallout feautre_name to enum

parent 79efb9d0
class UserCalloutsController < ApplicationController class UserCalloutsController < ApplicationController
def create def create
if ensure_callout if check_feature_name && ensure_callout
respond_to do |format| respond_to do |format|
format.json { head :ok } format.json { head :ok }
end end
...@@ -13,6 +13,10 @@ class UserCalloutsController < ApplicationController ...@@ -13,6 +13,10 @@ class UserCalloutsController < ApplicationController
private private
def check_feature_name
UserCallout.feature_names.keys.include?(callout_param)
end
def ensure_callout def ensure_callout
current_user.callouts.find_or_create_by(feature_name: callout_param) current_user.callouts.find_or_create_by(feature_name: callout_param)
end end
......
module UserCalloutsHelper module UserCalloutsHelper
GKE_CLUSTER_INTEGRATION = 'gke_cluster_integration'.freeze GKE_CLUSTER_INTEGRATION = 'gke_cluster_integration'.freeze
# Higher value = higher priority
PRIORITY = {
GKE_CLUSTER_INTEGRATION: 0
}.freeze
def show_gke_cluster_integration_callout?(project) def show_gke_cluster_integration_callout?(project)
current_user && !user_dismissed?(GKE_CLUSTER_INTEGRATION) && current_user && !user_dismissed?(GKE_CLUSTER_INTEGRATION) &&
can?(current_user, :create_cluster, project) can?(current_user, :create_cluster, project)
......
class UserCallout < ActiveRecord::Base class UserCallout < ActiveRecord::Base
belongs_to :user belongs_to :user
enum feature_name: {
gke_cluster_integration: 0
}
validates :user, presence: true validates :user, presence: true
validates :feature_name, presence: true, uniqueness: { scope: :user_id } validates :feature_name,
presence: true,
uniqueness: { scope: :user_id },
inclusion: { in: UserCallout.feature_names.keys }
end end
...@@ -7,7 +7,7 @@ class CreateUserCallouts < ActiveRecord::Migration ...@@ -7,7 +7,7 @@ class CreateUserCallouts < ActiveRecord::Migration
def change def change
create_table :user_callouts do |t| create_table :user_callouts do |t|
t.string :feature_name, null: false t.integer :feature_name, null: false
t.references :user, index: true, foreign_key: { on_delete: :cascade }, null: false t.references :user, index: true, foreign_key: { on_delete: :cascade }, null: false
end end
......
...@@ -1770,7 +1770,7 @@ ActiveRecord::Schema.define(version: 20180202111106) do ...@@ -1770,7 +1770,7 @@ ActiveRecord::Schema.define(version: 20180202111106) do
add_index "user_agent_details", ["subject_id", "subject_type"], name: "index_user_agent_details_on_subject_id_and_subject_type", using: :btree add_index "user_agent_details", ["subject_id", "subject_type"], name: "index_user_agent_details_on_subject_id_and_subject_type", using: :btree
create_table "user_callouts", force: :cascade do |t| create_table "user_callouts", force: :cascade do |t|
t.string "feature_name", null: false t.integer "feature_name", null: false
t.integer "user_id", null: false t.integer "user_id", null: false
end end
......
...@@ -8,7 +8,10 @@ describe UserCalloutsController do ...@@ -8,7 +8,10 @@ describe UserCalloutsController do
end end
describe "POST #create" do describe "POST #create" do
subject { post :create, feature_name: 'feature_name', format: :json } subject { post :create, feature_name: feature_name, format: :json }
context 'with valid feature name' do
let(:feature_name) { UserCallout.feature_names.keys.first }
context 'when callout entry does not exist' do context 'when callout entry does not exist' do
it 'should create a callout entry with dismissed state' do it 'should create a callout entry with dismissed state' do
...@@ -23,7 +26,7 @@ describe UserCalloutsController do ...@@ -23,7 +26,7 @@ describe UserCalloutsController do
end end
context 'when callout entry already exists' do context 'when callout entry already exists' do
let!(:callout) { create(:user_callout, feature_name: 'feature_name', user: user) } let!(:callout) { create(:user_callout, feature_name: UserCallout.feature_names.keys.first, user: user) }
it 'should return success' do it 'should return success' do
subject subject
...@@ -32,4 +35,15 @@ describe UserCalloutsController do ...@@ -32,4 +35,15 @@ describe UserCalloutsController do
end end
end end
end end
context 'with invalid feature name' do
let(:feature_name) { 'bogus_feature_name' }
it 'should return bad request' do
subject
expect(response).to have_gitlab_http_status(:bad_request)
end
end
end
end end
FactoryBot.define do FactoryBot.define do
factory :user_callout do factory :user_callout do
feature_name 'test_callout' feature_name :gke_cluster_integration
user user
end end
......
...@@ -11,6 +11,6 @@ describe UserCallout do ...@@ -11,6 +11,6 @@ describe UserCallout do
it { is_expected.to validate_presence_of(:user) } it { is_expected.to validate_presence_of(:user) }
it { is_expected.to validate_presence_of(:feature_name) } it { is_expected.to validate_presence_of(:feature_name) }
it { is_expected.to validate_uniqueness_of(:feature_name).scoped_to(:user_id) } it { is_expected.to validate_uniqueness_of(:feature_name).scoped_to(:user_id).ignoring_case_sensitivity }
end end
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