c8d01a84ce
Introduces the ability to seed sample data into accounts in development and staging. fixes: #3429
105 lines
3.9 KiB
Ruby
105 lines
3.9 KiB
Ruby
## Class to generate sample inboxes for a chatwoot test @Account.
|
|
############################################################
|
|
### Usage #####
|
|
#
|
|
# # Seed an account with all data types in this class
|
|
# Seeders::InboxSeeder.new(account: @Account.find(1), company_data: {name: 'PaperLayer', doamin: 'paperlayer.test'}).perform!
|
|
#
|
|
#
|
|
############################################################
|
|
|
|
class Seeders::InboxSeeder
|
|
def initialize(account:, company_data:)
|
|
raise 'Inbox Seeding is not allowed in production.' if Rails.env.production?
|
|
|
|
@account = account
|
|
@company_data = company_data
|
|
end
|
|
|
|
def perform!
|
|
seed_website_inbox
|
|
seed_facebook_inbox
|
|
seed_twitter_inbox
|
|
seed_whatsapp_inbox
|
|
seed_sms_inbox
|
|
seed_email_inbox
|
|
seed_api_inbox
|
|
seed_telegram_inbox
|
|
seed_line_inbox
|
|
end
|
|
|
|
def seed_website_inbox
|
|
channel = Channel::WebWidget.create!(account: @account, website_url: "https://#{@company_data['domain']}")
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Website")
|
|
end
|
|
|
|
def seed_facebook_inbox
|
|
channel = Channel::FacebookPage.create!(account: @account, user_access_token: SecureRandom.hex, page_access_token: SecureRandom.hex,
|
|
page_id: SecureRandom.hex)
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Facebook")
|
|
end
|
|
|
|
def seed_twitter_inbox
|
|
channel = Channel::TwitterProfile.create!(account: @account, twitter_access_token: SecureRandom.hex,
|
|
twitter_access_token_secret: SecureRandom.hex, profile_id: '123')
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Twitter")
|
|
end
|
|
|
|
def seed_whatsapp_inbox
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
Channel::Whatsapp.insert(
|
|
{
|
|
account_id: @account.id,
|
|
phone_number: Faker::PhoneNumber.cell_phone_in_e164,
|
|
created_at: Time.now.utc,
|
|
updated_at: Time.now.utc
|
|
},
|
|
returning: %w[id]
|
|
)
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
|
|
channel = Channel::Whatsapp.find_by(account_id: @account.id)
|
|
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Whatsapp")
|
|
end
|
|
|
|
def seed_sms_inbox
|
|
channel = Channel::Sms.create!(account: @account, phone_number: Faker::PhoneNumber.cell_phone_in_e164)
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Mobile")
|
|
end
|
|
|
|
def seed_email_inbox
|
|
channel = Channel::Email.create!(account: @account, email: "test#{SecureRandom.hex}@#{@company_data['domain']}",
|
|
forward_to_email: "test_fwd#{SecureRandom.hex}@#{@company_data['domain']}")
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Email")
|
|
end
|
|
|
|
def seed_api_inbox
|
|
channel = Channel::Api.create!(account: @account)
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} API")
|
|
end
|
|
|
|
def seed_telegram_inbox
|
|
# rubocop:disable Rails/SkipsModelValidations
|
|
bot_token = SecureRandom.hex
|
|
Channel::Telegram.insert(
|
|
{
|
|
account_id: @account.id,
|
|
bot_name: (@company_data['name']).to_s,
|
|
bot_token: bot_token,
|
|
created_at: Time.now.utc,
|
|
updated_at: Time.now.utc
|
|
},
|
|
returning: %w[id]
|
|
)
|
|
channel = Channel::Telegram.find_by(bot_token: bot_token)
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Telegram")
|
|
# rubocop:enable Rails/SkipsModelValidations
|
|
end
|
|
|
|
def seed_line_inbox
|
|
channel = Channel::Line.create!(account: @account, line_channel_id: SecureRandom.hex, line_channel_secret: SecureRandom.hex,
|
|
line_channel_token: SecureRandom.hex)
|
|
Inbox.create!(channel: channel, account: @account, name: "#{@company_data['name']} Line")
|
|
end
|
|
end
|