diff --git a/app/assets/stylesheets/login.css.scss b/app/assets/stylesheets/login.css.scss index d4bc61502..69ab6c0ad 100644 --- a/app/assets/stylesheets/login.css.scss +++ b/app/assets/stylesheets/login.css.scss @@ -1,7 +1,6 @@ body { padding-top: 40px; padding-bottom: 40px; - background-color: #eee; } .form-signin { diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb index c07222814..718b41567 100644 --- a/app/controllers/admin/contacts_controller.rb +++ b/app/controllers/admin/contacts_controller.rb @@ -1,4 +1,4 @@ -class Admin::ContactsController < ApplicationController +class Admin::ContactsController < AdminController # TODO created_by and updated_by ids before_action :set_contact, only: [:show, :destroy, :edit, :update] diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index 8fb900539..b46d49286 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -1,4 +1,4 @@ -class Admin::DomainsController < ApplicationController +class Admin::DomainsController < AdminController before_action :set_domain, only: [:show, :edit, :update, :destroy] before_action :verify_deletion, only: [:destroy] diff --git a/app/controllers/admin/registrars_controller.rb b/app/controllers/admin/registrars_controller.rb index 974b8568e..767138468 100644 --- a/app/controllers/admin/registrars_controller.rb +++ b/app/controllers/admin/registrars_controller.rb @@ -1,4 +1,4 @@ -class Admin::RegistrarsController < ApplicationController +class Admin::RegistrarsController < AdminController def search render json: Registrar.search_by_query(params[:q]) end diff --git a/app/controllers/admin/setting_groups_controller.rb b/app/controllers/admin/setting_groups_controller.rb index cda66ca64..994cfe531 100644 --- a/app/controllers/admin/setting_groups_controller.rb +++ b/app/controllers/admin/setting_groups_controller.rb @@ -1,4 +1,4 @@ -class Admin::SettingGroupsController < ApplicationController +class Admin::SettingGroupsController < AdminController before_action :set_setting_group, only: [:show, :update] def index diff --git a/app/controllers/admin_controller.rb b/app/controllers/admin_controller.rb new file mode 100644 index 000000000..c87602e4f --- /dev/null +++ b/app/controllers/admin_controller.rb @@ -0,0 +1,7 @@ +class AdminController < ApplicationController + before_action :verify_admin + + def verify_admin + redirect_to client_root_path unless current_user.try(:admin?) + end +end diff --git a/app/controllers/client/domains_controller.rb b/app/controllers/client/domains_controller.rb index d9b104e5c..ab2cc373f 100644 --- a/app/controllers/client/domains_controller.rb +++ b/app/controllers/client/domains_controller.rb @@ -2,7 +2,8 @@ class Client::DomainsController < ClientController include Shared::CommonDomain def index - @q = current_user.registrar.domains.search(params[:q]) + @q = Domain.search(params[:q]) if current_user.admin? + @q = current_user.registrar.domains.search(params[:q]) unless current_user.admin? @domains = @q.result.page(params[:page]) end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 75a87d73a..d3f0d049c 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -1,8 +1,10 @@ class SessionsController < Devise::SessionsController def create - if Rails.env.development? + if Rails.env.development? || Rails.env.test? @user = User.find_by(username: 'gitlab') if params[:gitlab] @user = User.find_by(username: 'zone') if params[:zone] + + flash[:notice] = I18n.t('shared.welcome') sign_in_and_redirect @user, :event => :authentication return end diff --git a/app/views/layouts/login.haml b/app/views/layouts/login.haml index 3d7409479..d29f65331 100644 --- a/app/views/layouts/login.haml +++ b/app/views/layouts/login.haml @@ -14,9 +14,13 @@ %body .container .form-signin + - display = (flash.empty?) ? 'none' : 'block' + #flash{style: "display: #{display};"} + - type = (flash[:notice]) ? 'bg-success' : 'bg-danger' + .alert{class: type}= flash[:notice] || flash[:alert] %h2.form-signin-heading.text-center Eesti Interneti SA %hr - - if Rails.env.development? + - if Rails.env.development? || Rails.env.test? = button_to 'ID card (gitlab)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'gitlab' = button_to 'ID card (zone)', 'sessions', class: 'btn btn-lg btn-primary btn-block', name: 'zone' -else diff --git a/config/locales/en.yml b/config/locales/en.yml index 120a0f40b..13b432adc 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -297,3 +297,4 @@ en: domain_was_not_found: 'Domain was not found!' domain_list: 'Domain list' register_new_domain: 'Register new domain' + welcome: 'Welcome!' diff --git a/spec/fabricators/user_fabricator.rb b/spec/fabricators/user_fabricator.rb new file mode 100644 index 000000000..4fa71d703 --- /dev/null +++ b/spec/fabricators/user_fabricator.rb @@ -0,0 +1,8 @@ +Fabricator(:user) do + username 'gitlab' + password 'ghyt9e4fu' + email 'info@gitlab.eu' + identity_code '37810013108' + admin true + registrar +end diff --git a/spec/features/sessions_spec.rb b/spec/features/sessions_spec.rb new file mode 100644 index 000000000..542671bee --- /dev/null +++ b/spec/features/sessions_spec.rb @@ -0,0 +1,47 @@ +require 'rails_helper' + +feature 'Sessions', type: :feature do + let(:elkdata) { Fabricate(:registrar, { name: 'Elkdata', reg_no: '123' }) } + let(:zone) { Fabricate(:registrar) } + + background do + Fabricate(:user, registrar: zone) + Fabricate(:user, registrar: zone, username: 'zone', admin: false) + Fabricate(:domain_validation_setting_group) + Fabricate.times(2, :domain, registrar: zone) + Fabricate.times(2, :domain, registrar: elkdata) + end + + scenario 'Admin logs in' do + visit root_path + expect(page).to have_button('ID card (gitlab)') + expect(page).to have_button('ID card (zone)') + + click_on 'ID card (gitlab)' + expect(page).to have_text('Welcome!') + + uri = URI.parse(current_url) + expect(uri.path).to eq(admin_root_path) + + expect(page).to have_link('Elkdata', count: 2) + expect(page).to have_link('Zone Media OÜ', count: 2) + end + + scenario 'Client logs in' do + visit root_path + + click_on 'ID card (zone)' + expect(page).to have_text('Welcome!') + + uri = URI.parse(current_url) + expect(uri.path).to eq(client_root_path) + + zone.domains.pluck(:name).each do |name| + expect(page).to have_link(name) + end + + elkdata.domains.pluck(:name).each do |name| + expect(page).to_not have_link(name) + end + end +end