From a594b873872fa5c83cc60e1327e59b5a19524655 Mon Sep 17 00:00:00 2001 From: Lou Date: Tue, 13 Apr 2021 18:20:12 +0200 Subject: [PATCH] Add activity model and unit tests --- app/models/activity.rb | 6 ++++++ app/models/user.rb | 1 + db/migrate/20210413142821_create_activities.rb | 12 ++++++++++++ db/schema.rb | 14 +++++++++++++- test/fixtures/activities.yml | 7 +++++++ test/fixtures/users.yml | 2 +- test/models/activity_test.rb | 14 ++++++++++++++ test/models/user_test.rb | 6 ++++++ 8 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 app/models/activity.rb create mode 100644 db/migrate/20210413142821_create_activities.rb create mode 100644 test/fixtures/activities.yml create mode 100644 test/models/activity_test.rb diff --git a/app/models/activity.rb b/app/models/activity.rb new file mode 100644 index 0000000..571a591 --- /dev/null +++ b/app/models/activity.rb @@ -0,0 +1,6 @@ +class Activity < ApplicationRecord + belongs_to :author, class_name: "User" + + validates :name, presence: true + validates :author, presence: true +end diff --git a/app/models/user.rb b/app/models/user.rb index dba7b51..af13bb1 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -4,5 +4,6 @@ class User < ApplicationRecord validates :email, format:{ with: /\S+@\S+[.]\S+/, message: "Must be a valid email format." } validates :password_digest, presence: true + has_many :created_activities, foreign_key: 'author_id', class_name: 'Activity', dependent: :destroy has_secure_password end diff --git a/db/migrate/20210413142821_create_activities.rb b/db/migrate/20210413142821_create_activities.rb new file mode 100644 index 0000000..d857fa8 --- /dev/null +++ b/db/migrate/20210413142821_create_activities.rb @@ -0,0 +1,12 @@ +class CreateActivities < ActiveRecord::Migration[6.1] + def change + create_table :activities do |t| + t.string :name, index: true, null: false + t.string :client + t.string :description + t.references :author, null: false, foreign_key: { to_table: :users } + + t.timestamps + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 8dbc0fa..22e35bc 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,18 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2021_04_13_093535) do +ActiveRecord::Schema.define(version: 2021_04_13_142821) do + + create_table "activities", force: :cascade do |t| + t.string "name", null: false + t.string "client" + t.string "description" + t.integer "author_id", null: false + t.datetime "created_at", precision: 6, null: false + t.datetime "updated_at", precision: 6, null: false + t.index ["author_id"], name: "index_activities_on_author_id" + t.index ["name"], name: "index_activities_on_name" + end create_table "users", force: :cascade do |t| t.string "email", null: false @@ -22,4 +33,5 @@ ActiveRecord::Schema.define(version: 2021_04_13_093535) do t.index ["username"], name: "index_users_on_username", unique: true end + add_foreign_key "activities", "users", column: "author_id" end diff --git a/test/fixtures/activities.yml b/test/fixtures/activities.yml new file mode 100644 index 0000000..526a98e --- /dev/null +++ b/test/fixtures/activities.yml @@ -0,0 +1,7 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: RandomActivity + client: MyClient + description: RandomActivity + author: one \ No newline at end of file diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml index ac8eb83..8fc06ce 100644 --- a/test/fixtures/users.yml +++ b/test/fixtures/users.yml @@ -3,4 +3,4 @@ one: email: one@one.com username: OneUsername - password_digest: <%= BCrypt::Password.create('g00d_pa$$') %> + password_digest: <%= BCrypt::Password.create('g00d_pa$$') %> \ No newline at end of file diff --git a/test/models/activity_test.rb b/test/models/activity_test.rb new file mode 100644 index 0000000..db2d34f --- /dev/null +++ b/test/models/activity_test.rb @@ -0,0 +1,14 @@ +require "test_helper" + +class ActivityTest < ActiveSupport::TestCase + test "activity's author should exist" do + user = User.new(email: "test@test.com", username: "UserTest", password_digest: 'password') + activity = Activity.new(name: "Pyheatpump", description: "A software to control heat pumps", author: user) + assert activity.valid? + end + + test "not valid if author does not exist" do + activity = Activity.new(name: "Pyheatpump", description: "A software to control heat pumps", author: User.find_by_id(666)) + assert_not activity.valid? + end +end \ No newline at end of file diff --git a/test/models/user_test.rb b/test/models/user_test.rb index 156e6f1..25a7c25 100644 --- a/test/models/user_test.rb +++ b/test/models/user_test.rb @@ -22,4 +22,10 @@ class UserTest < ActiveSupport::TestCase user = User.new(email: other_user.email, username: "UserTest", password_digest: "test_password") assert_not user.valid? end + + test 'destroy user should destroy linked activity' do + assert_difference('Activity.count', -1) do + users(:one).destroy + end + end end