From 8bfad75513bccdfac0c91cbb11a1ebeba26c62bf Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Fri, 7 Dec 2018 08:11:18 +0500 Subject: [PATCH] Add model TelegramChat --- app/models/telegram_chat.rb | 8 +++++++ .../20181207030332_create_telegram_chats.rb | 17 ++++++++++++++ db/schema.rb | 14 ++++++++++- factories/telegram_chats.rb | 13 +++++++++++ spec/models/telegram_chat_spec.rb | 23 +++++++++++++++++++ 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 app/models/telegram_chat.rb create mode 100644 db/migrate/20181207030332_create_telegram_chats.rb create mode 100644 factories/telegram_chats.rb create mode 100644 spec/models/telegram_chat_spec.rb diff --git a/app/models/telegram_chat.rb b/app/models/telegram_chat.rb new file mode 100644 index 0000000..b376485 --- /dev/null +++ b/app/models/telegram_chat.rb @@ -0,0 +1,8 @@ +# frozen_string_literal: true + +class TelegramChat < ApplicationRecord + CHAT_TYPES = %w[private group supergroup channel].freeze + + validates :remote_id, presence: true, uniqueness: true + validates :chat_type, presence: true, inclusion: { in: CHAT_TYPES } +end diff --git a/db/migrate/20181207030332_create_telegram_chats.rb b/db/migrate/20181207030332_create_telegram_chats.rb new file mode 100644 index 0000000..3bd25f4 --- /dev/null +++ b/db/migrate/20181207030332_create_telegram_chats.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +class CreateTelegramChats < ActiveRecord::Migration[5.2] + def change + create_table :telegram_chats do |t| + t.timestamps null: false + + t.integer :remote_id, null: false, index: { unique: true } + t.string :chat_type, null: false + + t.string :title + t.string :username + t.string :first_name + t.string :last_name + end + end +end diff --git a/db/schema.rb b/db/schema.rb index 06483b7..58f30d8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2018_12_07_002553) do +ActiveRecord::Schema.define(version: 2018_12_07_030332) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -136,6 +136,18 @@ ActiveRecord::Schema.define(version: 2018_12_07_002553) do t.string "username" end + create_table "telegram_chats", force: :cascade do |t| + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "remote_id", null: false + t.string "chat_type", null: false + t.string "title" + t.string "username" + t.string "first_name" + t.string "last_name" + t.index ["remote_id"], name: "index_telegram_chats_on_remote_id", unique: true + end + create_table "user_omniauths", force: :cascade do |t| t.datetime "created_at", null: false t.datetime "updated_at", null: false diff --git a/factories/telegram_chats.rb b/factories/telegram_chats.rb new file mode 100644 index 0000000..8a1ad2f --- /dev/null +++ b/factories/telegram_chats.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +FactoryBot.define do + factory :telegram_chat do + remote_id { rand(-100_000_000..100_000_000) } + chat_type { TelegramChat::CHAT_TYPES.sample } + + title { Faker::Lorem.sentence } + username { Faker::Internet.username } + first_name { Faker::Name.first_name } + last_name { Faker::Name.last_name } + end +end diff --git a/spec/models/telegram_chat_spec.rb b/spec/models/telegram_chat_spec.rb new file mode 100644 index 0000000..341e285 --- /dev/null +++ b/spec/models/telegram_chat_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe TelegramChat do + subject { create :telegram_chat } + + it { is_expected.to validate_presence_of :remote_id } + it { is_expected.to validate_presence_of :chat_type } + + it { is_expected.not_to validate_presence_of :title } + it { is_expected.not_to validate_presence_of :username } + it { is_expected.not_to validate_presence_of :first_name } + it { is_expected.not_to validate_presence_of :last_name } + + it { is_expected.to validate_uniqueness_of :remote_id } + + it do + is_expected.to \ + validate_inclusion_of(:chat_type) + .in_array(%w[private group supergroup channel]) + end +end