diff --git a/app/models/manager.rb b/app/models/manager.rb new file mode 100644 index 000000000..1cfc3e545 --- /dev/null +++ b/app/models/manager.rb @@ -0,0 +1,12 @@ +class Manager < ActiveRecord::Base + validates :username, presence: true, uniqueness: true + validates :password_digest, presence: true + + has_secure_password + + def self.valid_auth?(username = nil, password = nil) + return false unless username.present? && password.present? + Manager.find_by(username: username).try(:authenticate, password).present? + end + +end \ No newline at end of file diff --git a/db/migrate/20150930082311_create_managers.rb b/db/migrate/20150930082311_create_managers.rb new file mode 100644 index 000000000..3a921bf76 --- /dev/null +++ b/db/migrate/20150930082311_create_managers.rb @@ -0,0 +1,12 @@ +class CreateManagers < ActiveRecord::Migration + def change + create_table :managers do |t| + t.string :username, null: false + t.string :password_digest, null: false + t.timestamp :last_login_at + t.timestamps + end + + add_index :managers, [:username] + end +end diff --git a/db/schema.rb b/db/schema.rb index bbb8356e3..97ad0ab97 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150926115929) do +ActiveRecord::Schema.define(version: 20150930082311) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -168,6 +168,16 @@ ActiveRecord::Schema.define(version: 20150926115929) do add_index "locks", ["user_id"], name: "index_locks_on_user_id", using: :btree + create_table "managers", force: :cascade do |t| + t.string "username", null: false + t.string "password_digest", null: false + t.datetime "last_login_at" + t.datetime "created_at" + t.datetime "updated_at" + end + + add_index "managers", ["username"], name: "index_managers_on_username", using: :btree + create_table "moderators", force: :cascade do |t| t.integer "user_id" end diff --git a/spec/factories.rb b/spec/factories.rb index 2a876a0e2..fac81f1c9 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -218,6 +218,11 @@ FactoryGirl.define do user end + factory :manager do + sequence(:username) { |n| "manager#{n}" } + password 'supersecret' + end + factory :organization do user responsible_name "Johnny Utah" diff --git a/spec/models/manager_spec.rb b/spec/models/manager_spec.rb new file mode 100644 index 000000000..8e08e1224 --- /dev/null +++ b/spec/models/manager_spec.rb @@ -0,0 +1,46 @@ +require 'rails_helper' + +describe Manager do + + describe "valid?" do + + let(:manager) { create(:manager) } + + it "is false when username is blank" do + manager.username = nil + expect(manager).to_not be_valid + end + it "is false when password is blank" do + manager.password_digest = nil + expect(manager).to_not be_valid + end + + it "is true if username and password present" do + expect(manager).to be_valid + end + end + + describe "self.valid_auth?" do + before(:all) { create(:manager, username: "Silvia" ,password: "supersecret") } + + it "is false when username is blank" do + expect(Manager.valid_auth?(nil, "supersecret")).to be false + end + it "is false when password is blank" do + expect(Manager.valid_auth?("Silvia", nil)).to be false + end + + it "is false if manager unexistent" do + expect(Manager.valid_auth?("Manager", "supersecret")).to be false + end + + it "is false if wrong password unexistent" do + expect(Manager.valid_auth?("Silvia", "wrong")).to be false + end + + it "is true if right username/password combination" do + expect(Manager.valid_auth?("Silvia", "supersecret")).to be true + end + end + +end \ No newline at end of file