+
-
{{ chat.meta.sender.name }} {{inboxName(chat.inbox_id)}}
-
+
+ {{ chat.meta.sender.name }}
+
+ {{ inboxName(chat.inbox_id) }}
+
+
+
+
- {{ dynamicTime(lastMessage(chat).created_at) }}
+
+ {{ dynamicTime(lastMessage(chat).created_at) }}
+
{{ getUnreadCount }}
@@ -14,27 +37,25 @@
diff --git a/app/javascript/src/routes/dashboard/settings/inbox/inbox.routes.js b/app/javascript/src/routes/dashboard/settings/inbox/inbox.routes.js
index 563a01728..4f39f91a3 100644
--- a/app/javascript/src/routes/dashboard/settings/inbox/inbox.routes.js
+++ b/app/javascript/src/routes/dashboard/settings/inbox/inbox.routes.js
@@ -6,11 +6,12 @@ import ChannelList from './ChannelList';
import channelFactory from './channel-factory';
import AddAgents from './AddAgents';
import FinishSetup from './FinishSetup';
+import { frontendURL } from '../../../../helper/URLHelper';
export default {
routes: [
{
- path: '/u/settings/inboxes',
+ path: frontendURL('settings/inboxes'),
component: SettingsContent,
props: {
headerTitle: 'INBOX_MGMT.HEADER',
diff --git a/app/javascript/src/routes/dashboard/settings/reports/reports.routes.js b/app/javascript/src/routes/dashboard/settings/reports/reports.routes.js
index 1e31e83f7..0c354a524 100644
--- a/app/javascript/src/routes/dashboard/settings/reports/reports.routes.js
+++ b/app/javascript/src/routes/dashboard/settings/reports/reports.routes.js
@@ -1,10 +1,11 @@
import Index from './Index';
import SettingsContent from '../Wrapper';
+import { frontendURL } from '../../../../helper/URLHelper';
export default {
routes: [
{
- path: '/u/reports',
+ path: frontendURL('reports'),
component: SettingsContent,
props: {
headerTitle: 'REPORT.HEADER',
diff --git a/app/javascript/src/routes/dashboard/settings/settings.routes.js b/app/javascript/src/routes/dashboard/settings/settings.routes.js
index daeb1625f..38a00427e 100644
--- a/app/javascript/src/routes/dashboard/settings/settings.routes.js
+++ b/app/javascript/src/routes/dashboard/settings/settings.routes.js
@@ -4,18 +4,19 @@ import canned from './canned/canned.routes';
import reports from './reports/reports.routes';
import billing from './billing/billing.routes';
import Auth from '../../../api/auth';
+import { frontendURL } from '../../../helper/URLHelper';
export default {
routes: [
{
- path: '/u/settings',
+ path: frontendURL('settings'),
name: 'settings_home',
roles: ['administrator', 'agent'],
redirect: () => {
if (Auth.isAdmin()) {
- return '/u/settings/agents/';
+ return frontendURL('settings/agents');
}
- return '/u/settings/canned-response';
+ return frontendURL('settings/canned-response');
},
},
...inbox.routes,
diff --git a/app/javascript/src/routes/index.js b/app/javascript/src/routes/index.js
index c85648d03..dee3c48e0 100644
--- a/app/javascript/src/routes/index.js
+++ b/app/javascript/src/routes/index.js
@@ -5,6 +5,7 @@ import auth from '../api/auth';
import login from './login/login.routes';
import dashboard from './dashboard/dashboard.routes';
import authRoute from './auth/auth.routes';
+import { frontendURL } from '../helper/URLHelper';
/* Vue Routes */
const routes = [
@@ -13,7 +14,7 @@ const routes = [
...authRoute.routes,
{
path: '/',
- redirect: '/u/dashboard',
+ redirect: frontendURL('dashboard'),
},
];
@@ -66,15 +67,15 @@ const redirectUser = (to, from, next) => {
const isAccessible =
window.roleWiseRoutes[currentUser.role].indexOf(to.name) > -1;
if (!isAccessible) {
- return next('/u/dashboard');
+ return next(frontendURL('dashboard'));
}
}
// If unprotected and loggedIn -> redirect
if (unProtectedRoutes.indexOf(to.name) !== -1 && isLoggedIn) {
- return next('/u/dashboard');
+ return next(frontendURL('dashboard'));
}
if (unProtectedRoutes.indexOf(to.name) === -1 && !isLoggedIn) {
- return next('/u/login');
+ return next(frontendURL('login'));
}
return next();
};
@@ -82,7 +83,7 @@ const redirectUser = (to, from, next) => {
// protecting routes
router.beforeEach((to, from, next) => {
if (!to.name) {
- return next('/u/dashboard');
+ return next(frontendURL('dashboard'));
}
return redirectUser(to, from, next);
diff --git a/app/javascript/src/routes/login/login.routes.js b/app/javascript/src/routes/login/login.routes.js
index a58e03b24..05fb83674 100644
--- a/app/javascript/src/routes/login/login.routes.js
+++ b/app/javascript/src/routes/login/login.routes.js
@@ -1,9 +1,10 @@
import Login from './Login';
+import { frontendURL } from '../../helper/URLHelper';
export default {
routes: [
{
- path: '/u/login',
+ path: frontendURL('login'),
name: 'login',
component: Login,
},
diff --git a/app/javascript/src/store/modules/sidebar.js b/app/javascript/src/store/modules/sidebar.js
index 85bad3ceb..6ffda1806 100644
--- a/app/javascript/src/store/modules/sidebar.js
+++ b/app/javascript/src/store/modules/sidebar.js
@@ -7,6 +7,7 @@ import defaultState from '../../i18n/default-sidebar';
import * as types from '../mutation-types';
import Account from '../../api/account';
import ChannelApi from '../../api/channels';
+import { frontendURL } from '../../helper/URLHelper';
const state = defaultState;
// inboxes fetch flag
@@ -135,7 +136,7 @@ const mutations = {
payload = payload.map(item => ({
channel_id: item.id,
label: item.name,
- toState: `/u/inbox/${item.id}`,
+ toState: frontendURL(`inbox/${item.id}`),
channelType: item.channelType,
avatarUrl: item.avatar_url,
pageId: item.page_id,
@@ -154,7 +155,7 @@ const mutations = {
menuItems.inbox.children.push({
channel_id: data.id,
label: data.name,
- toState: `/u/inbox/${data.id}`,
+ toState: frontendURL(`inbox/${data.id}`),
channelType: data.channelType,
avatarUrl: data.avatar_url === undefined ? null : data.avatar_url,
pageId: data.page_id,
diff --git a/app/mailers/application_mailer.rb b/app/mailers/application_mailer.rb
index f9c8d2bc6..56af56186 100644
--- a/app/mailers/application_mailer.rb
+++ b/app/mailers/application_mailer.rb
@@ -1,4 +1,7 @@
class ApplicationMailer < ActionMailer::Base
default from: 'accounts@chatwoot.com'
layout 'mailer'
+
+ # helpers
+ helper :frontend_urls
end
diff --git a/app/views/devise/mailer/confirmation_instructions.html.erb b/app/views/devise/mailer/confirmation_instructions.html.erb
index dc55f64f6..234ddb8ea 100644
--- a/app/views/devise/mailer/confirmation_instructions.html.erb
+++ b/app/views/devise/mailer/confirmation_instructions.html.erb
@@ -2,4 +2,4 @@
You can confirm your account email through the link below:
-
<%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %>
+
<%= link_to 'Confirm my account', frontend_url('auth/confirmation', confirmation_token: @token) %>
diff --git a/app/views/devise/mailer/reset_password_instructions.html.erb b/app/views/devise/mailer/reset_password_instructions.html.erb
index f667dc12f..9405c99b1 100644
--- a/app/views/devise/mailer/reset_password_instructions.html.erb
+++ b/app/views/devise/mailer/reset_password_instructions.html.erb
@@ -2,7 +2,7 @@
Someone has requested a link to change your password. You can do this through the link below.
-
<%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %>
+
<%= link_to 'Change my password', frontend_url('auth/password/edit', reset_password_token: @token) %>
If you didn't request this, please ignore this email.
Your password won't change until you access the link above and create a new one.
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
deleted file mode 100644
index cb52ef6f5..000000000
--- a/app/views/layouts/application.html.erb
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
Chatwoot
- <%= csrf_meta_tags %>
-
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
- <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
-
- <% if current_user %>
-
- <% end %>
- <% if user_signed_in? %>
-
- <%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
-
- <% else %>
-
- <%= link_to('Login', new_user_session_path) %>
-
- <% end %>
- <%= yield %>
-
-
diff --git a/config/environments/test.rb b/config/environments/test.rb
index 1c40f705e..be706fab7 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -7,7 +7,7 @@ require "active_support/core_ext/integer/time"
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
-
+
config.cache_classes = false
# Do not eager load code on boot. This avoids loading your whole application
@@ -20,6 +20,7 @@ Rails.application.configure do
config.public_file_server.headers = {
'Cache-Control' => "public, max-age=#{1.hour.to_i}"
}
+ config.action_mailer.default_url_options = { :host => 'localhost', port: 3000 }
# Show full error reports and disable caching.
config.consider_all_requests_local = true
diff --git a/config/routes.rb b/config/routes.rb
index 284abf866..d072552b5 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -5,11 +5,13 @@ Rails.application.routes.draw do
mount_devise_token_auth_for 'User', at: 'auth', controllers: { confirmations: 'confirmations', passwords: 'passwords',
sessions: 'sessions' }, via: [:get, :post]
- get "/u", to: "dashboard#index"
- get "/u/*params", to: "dashboard#index"
- get '/', to: redirect('/u/login')
- match '/status', to: 'home#status', via: [:get] #for elb checks
+ root :to => "dashboard#index"
+
+ get "/app", to: "dashboard#index"
+ get "/app/*params", to: "dashboard#index"
+
+ match '/status', to: 'home#status', via: [:get]
namespace :api do
namespace :v1 do
diff --git a/package.json b/package.json
index 5caf90340..ba03e4de7 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"md5": "~2.2.1",
"moment": "~2.19.3",
"pusher-js": "~4.0.0",
+ "query-string": "5",
"spinkit": "~1.2.5",
"sweet-modal-vue": "~1.0.3",
"tween.js": "~16.6.0",
diff --git a/test/controllers/.keep b/spec/controllers/.keep
similarity index 100%
rename from test/controllers/.keep
rename to spec/controllers/.keep
diff --git a/test/fixtures/.keep b/spec/fixtures/.keep
similarity index 100%
rename from test/fixtures/.keep
rename to spec/fixtures/.keep
diff --git a/test/fixtures/accounts.yml b/spec/fixtures/accounts.yml
similarity index 100%
rename from test/fixtures/accounts.yml
rename to spec/fixtures/accounts.yml
diff --git a/test/fixtures/attachments.yml b/spec/fixtures/attachments.yml
similarity index 100%
rename from test/fixtures/attachments.yml
rename to spec/fixtures/attachments.yml
diff --git a/test/fixtures/canned_responses.yml b/spec/fixtures/canned_responses.yml
similarity index 100%
rename from test/fixtures/canned_responses.yml
rename to spec/fixtures/canned_responses.yml
diff --git a/test/fixtures/channel/widgets.yml b/spec/fixtures/channel/widgets.yml
similarity index 100%
rename from test/fixtures/channel/widgets.yml
rename to spec/fixtures/channel/widgets.yml
diff --git a/test/fixtures/channels.yml b/spec/fixtures/channels.yml
similarity index 100%
rename from test/fixtures/channels.yml
rename to spec/fixtures/channels.yml
diff --git a/test/fixtures/contacts.yml b/spec/fixtures/contacts.yml
similarity index 100%
rename from test/fixtures/contacts.yml
rename to spec/fixtures/contacts.yml
diff --git a/test/fixtures/conversations.yml b/spec/fixtures/conversations.yml
similarity index 100%
rename from test/fixtures/conversations.yml
rename to spec/fixtures/conversations.yml
diff --git a/test/fixtures/facebook_pages.yml b/spec/fixtures/facebook_pages.yml
similarity index 100%
rename from test/fixtures/facebook_pages.yml
rename to spec/fixtures/facebook_pages.yml
diff --git a/test/fixtures/files/.keep b/spec/fixtures/files/.keep
similarity index 100%
rename from test/fixtures/files/.keep
rename to spec/fixtures/files/.keep
diff --git a/test/fixtures/inbox_members.yml b/spec/fixtures/inbox_members.yml
similarity index 100%
rename from test/fixtures/inbox_members.yml
rename to spec/fixtures/inbox_members.yml
diff --git a/test/fixtures/inboxes.yml b/spec/fixtures/inboxes.yml
similarity index 100%
rename from test/fixtures/inboxes.yml
rename to spec/fixtures/inboxes.yml
diff --git a/test/fixtures/messages.yml b/spec/fixtures/messages.yml
similarity index 100%
rename from test/fixtures/messages.yml
rename to spec/fixtures/messages.yml
diff --git a/test/fixtures/subscriptions.yml b/spec/fixtures/subscriptions.yml
similarity index 100%
rename from test/fixtures/subscriptions.yml
rename to spec/fixtures/subscriptions.yml
diff --git a/test/fixtures/telegram_bots.yml b/spec/fixtures/telegram_bots.yml
similarity index 100%
rename from test/fixtures/telegram_bots.yml
rename to spec/fixtures/telegram_bots.yml
diff --git a/test/fixtures/users.yml b/spec/fixtures/users.yml
similarity index 100%
rename from test/fixtures/users.yml
rename to spec/fixtures/users.yml
diff --git a/spec/helpers/frontend_urls_helper_spec.rb b/spec/helpers/frontend_urls_helper_spec.rb
new file mode 100644
index 000000000..b0eed4b62
--- /dev/null
+++ b/spec/helpers/frontend_urls_helper_spec.rb
@@ -0,0 +1,17 @@
+require "rails_helper"
+
+describe FrontendUrlsHelper, type: :helper do
+ describe "#frontend_url" do
+ context "without query params" do
+ it "creates path correctly" do
+ expect(helper.frontend_url('dashboard')).to eq "http://test.host/app/dashboard"
+ end
+ end
+
+ context "with query params" do
+ it "creates path correctly" do
+ expect(helper.frontend_url('dashboard', p1: 'p1', p2: 'p2')).to eq "http://test.host/app/dashboard?p1=p1&p2=p2"
+ end
+ end
+ end
+end
diff --git a/test/helpers/.keep b/spec/integration/.keep
similarity index 100%
rename from test/helpers/.keep
rename to spec/integration/.keep
diff --git a/test/integration/.keep b/spec/mailers/.keep
similarity index 100%
rename from test/integration/.keep
rename to spec/mailers/.keep
diff --git a/test/mailers/.keep b/spec/models/.keep
similarity index 100%
rename from test/mailers/.keep
rename to spec/models/.keep
diff --git a/test/models/channel/widget_test.rb b/spec/models/channel/widget_test.rb
similarity index 100%
rename from test/models/channel/widget_test.rb
rename to spec/models/channel/widget_test.rb
diff --git a/spec/rails_helper.rb b/spec/rails_helper.rb
new file mode 100644
index 000000000..4abe2044d
--- /dev/null
+++ b/spec/rails_helper.rb
@@ -0,0 +1,60 @@
+require 'spec_helper'
+ENV['RAILS_ENV'] ||= 'test'
+require File.expand_path('../../config/environment', __FILE__)
+# Prevent database truncation if the environment is production
+abort("The Rails environment is running in production mode!") if Rails.env.production?
+require 'rspec/rails'
+# Add additional requires below this line. Rails is not loaded until this point!
+
+# Requires supporting ruby files with custom matchers and macros, etc, in
+# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
+# run as spec files by default. This means that files in spec/support that end
+# in _spec.rb will both be required and run as specs, causing the specs to be
+# run twice. It is recommended that you do not name files matching this glob to
+# end with _spec.rb. You can configure this pattern with the --pattern
+# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
+#
+# The following line is provided for convenience purposes. It has the downside
+# of increasing the boot-up time by auto-requiring all files in the support
+# directory. Alternatively, in the individual `*_spec.rb` files, manually
+# require only the support files necessary.
+#
+# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].each { |f| require f }
+
+# Checks for pending migrations and applies them before tests are run.
+# If you are not using ActiveRecord, you can remove these lines.
+begin
+ ActiveRecord::Migration.maintain_test_schema!
+rescue ActiveRecord::PendingMigrationError => e
+ puts e.to_s.strip
+ exit 1
+end
+RSpec.configure do |config|
+ # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
+ config.fixture_path = "#{::Rails.root}/spec/fixtures"
+
+ # If you're not using ActiveRecord, or you'd prefer not to run each of your
+ # examples within a transaction, remove the following line or assign false
+ # instead of true.
+ config.use_transactional_fixtures = true
+
+ # RSpec Rails can automatically mix in different behaviours to your tests
+ # based on their file location, for example enabling you to call `get` and
+ # `post` in specs under `spec/controllers`.
+ #
+ # You can disable this behaviour by removing the line below, and instead
+ # explicitly tag your specs with their type, e.g.:
+ #
+ # RSpec.describe UsersController, :type => :controller do
+ # # ...
+ # end
+ #
+ # The different available types are documented in the features, such as in
+ # https://relishapp.com/rspec/rspec-rails/docs
+ config.infer_spec_type_from_file_location!
+
+ # Filter lines from Rails gems in backtraces.
+ config.filter_rails_from_backtrace!
+ # arbitrary gems may also be filtered via:
+ # config.filter_gems_from_backtrace("gem name")
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
new file mode 100644
index 000000000..0864f0e05
--- /dev/null
+++ b/spec/spec_helper.rb
@@ -0,0 +1,15 @@
+
+RSpec.configure do |config|
+ config.expect_with :rspec do |expectations|
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
+ end
+
+ config.mock_with :rspec do |mocks|
+ mocks.verify_partial_doubles = true
+ end
+
+ config.shared_context_metadata_behavior = :apply_to_host_groups
+
+ # config.include Rails.application.routes.url_helpers
+
+end
diff --git a/test/test_helper.rb b/spec/test_helper.rb
similarity index 100%
rename from test/test_helper.rb
rename to spec/test_helper.rb
diff --git a/test/controllers/api/base_controller_test.rb b/test/controllers/api/base_controller_test.rb
deleted file mode 100644
index f7624324c..000000000
--- a/test/controllers/api/base_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::BaseControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/agents_controller_test.rb b/test/controllers/api/v1/agents_controller_test.rb
deleted file mode 100644
index 76d1e6ed3..000000000
--- a/test/controllers/api/v1/agents_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::AgentsControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/canned_responses_controller_test.rb b/test/controllers/api/v1/canned_responses_controller_test.rb
deleted file mode 100644
index d91393118..000000000
--- a/test/controllers/api/v1/canned_responses_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::CannedResponsesControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/conversations_controller_test.rb b/test/controllers/api/v1/conversations_controller_test.rb
deleted file mode 100644
index 01391cdd6..000000000
--- a/test/controllers/api/v1/conversations_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::ConversationsControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/reports_controller_test.rb b/test/controllers/api/v1/reports_controller_test.rb
deleted file mode 100644
index a0d9fcf17..000000000
--- a/test/controllers/api/v1/reports_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::ReportsControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/subscriptions_controller_test.rb b/test/controllers/api/v1/subscriptions_controller_test.rb
deleted file mode 100644
index f5f73f1c2..000000000
--- a/test/controllers/api/v1/subscriptions_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::SubscriptionsControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/webhooks_controller_test.rb b/test/controllers/api/v1/webhooks_controller_test.rb
deleted file mode 100644
index 64ca035cf..000000000
--- a/test/controllers/api/v1/webhooks_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::WebhooksControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/api/v1/widget/messages_controller_test.rb b/test/controllers/api/v1/widget/messages_controller_test.rb
deleted file mode 100644
index 5170bba81..000000000
--- a/test/controllers/api/v1/widget/messages_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class Api::V1::Widget::MessagesControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/controllers/home_controller_test.rb b/test/controllers/home_controller_test.rb
deleted file mode 100644
index 3e06bf0ea..000000000
--- a/test/controllers/home_controller_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class HomeControllerTest < ActionDispatch::IntegrationTest
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/.keep b/test/models/.keep
deleted file mode 100644
index e69de29bb..000000000
diff --git a/test/models/account_test.rb b/test/models/account_test.rb
deleted file mode 100644
index 6d1e10438..000000000
--- a/test/models/account_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class AccountTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/attachment_test.rb b/test/models/attachment_test.rb
deleted file mode 100644
index ff491dc11..000000000
--- a/test/models/attachment_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class AttachmentTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/canned_response_test.rb b/test/models/canned_response_test.rb
deleted file mode 100644
index 688fd2fa4..000000000
--- a/test/models/canned_response_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class CannedResponseTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/channel_test.rb b/test/models/channel_test.rb
deleted file mode 100644
index 33997683e..000000000
--- a/test/models/channel_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class ChannelTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/contact_test.rb b/test/models/contact_test.rb
deleted file mode 100644
index ccef1f912..000000000
--- a/test/models/contact_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class ContactTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/conversation_test.rb b/test/models/conversation_test.rb
deleted file mode 100644
index 3afa08b1a..000000000
--- a/test/models/conversation_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class ConversationTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/facebook_page_test.rb b/test/models/facebook_page_test.rb
deleted file mode 100644
index f4bc910b7..000000000
--- a/test/models/facebook_page_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class FacebookPageTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/inbox_member_test.rb b/test/models/inbox_member_test.rb
deleted file mode 100644
index 94796e30b..000000000
--- a/test/models/inbox_member_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class InboxMemberTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/inbox_test.rb b/test/models/inbox_test.rb
deleted file mode 100644
index 2c7bd48a8..000000000
--- a/test/models/inbox_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class InboxTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/message_test.rb b/test/models/message_test.rb
deleted file mode 100644
index 11e5db0ff..000000000
--- a/test/models/message_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class MessageTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/subscription_test.rb b/test/models/subscription_test.rb
deleted file mode 100644
index a045d1ea2..000000000
--- a/test/models/subscription_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class SubscriptionTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/telegram_bot_test.rb b/test/models/telegram_bot_test.rb
deleted file mode 100644
index 5685a7048..000000000
--- a/test/models/telegram_bot_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class TelegramBotTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/test/models/user_test.rb b/test/models/user_test.rb
deleted file mode 100644
index 82f61e010..000000000
--- a/test/models/user_test.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-require 'test_helper'
-
-class UserTest < ActiveSupport::TestCase
- # test "the truth" do
- # assert true
- # end
-end
diff --git a/yarn.lock b/yarn.lock
index 5369c4240..921ec18d6 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8422,6 +8422,15 @@ qs@~6.5.2:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+query-string@5:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+ integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
query-string@^4.1.0:
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"