Clean up about page (#1282)
* Add InstancePresenter to expose site details * Clean up about controller, use instance presenter
This commit is contained in:
		
							parent
							
								
									53eb31f124
								
							
						
					
					
						commit
						e5282e4ec0
					
				
					 8 changed files with 175 additions and 55 deletions
				
			
		| 
						 | 
					@ -2,30 +2,25 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class AboutController < ApplicationController
 | 
					class AboutController < ApplicationController
 | 
				
			||||||
  before_action :set_body_classes
 | 
					  before_action :set_body_classes
 | 
				
			||||||
 | 
					  before_action :set_instance_presenter, only: [:show, :more]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def index
 | 
					  def show; end
 | 
				
			||||||
    @description                  = Setting.site_description
 | 
					 | 
				
			||||||
    @open_registrations           = Setting.open_registrations
 | 
					 | 
				
			||||||
    @closed_registrations_message = Setting.closed_registrations_message
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @user = User.new
 | 
					  def more; end
 | 
				
			||||||
    @user.build_account
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def more
 | 
					 | 
				
			||||||
    @description          = Setting.site_description
 | 
					 | 
				
			||||||
    @extended_description = Setting.site_extended_description
 | 
					 | 
				
			||||||
    @contact_account      = Account.find_local(Setting.site_contact_username)
 | 
					 | 
				
			||||||
    @contact_email        = Setting.site_contact_email
 | 
					 | 
				
			||||||
    @user_count           = Rails.cache.fetch('user_count')            { User.count }
 | 
					 | 
				
			||||||
    @status_count         = Rails.cache.fetch('local_status_count')    { Status.local.count }
 | 
					 | 
				
			||||||
    @domain_count         = Rails.cache.fetch('distinct_domain_count') { Account.distinct.count(:domain) }
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def terms; end
 | 
					  def terms; end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private
 | 
					  private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def new_user
 | 
				
			||||||
 | 
					    User.new.tap(&:build_account)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  helper_method :new_user
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def set_instance_presenter
 | 
				
			||||||
 | 
					    @instance_presenter = InstancePresenter.new
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def set_body_classes
 | 
					  def set_body_classes
 | 
				
			||||||
    @body_classes = 'about-body'
 | 
					    @body_classes = 'about-body'
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										28
									
								
								app/presenters/instance_presenter.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								app/presenters/instance_presenter.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,28 @@
 | 
				
			||||||
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class InstancePresenter
 | 
				
			||||||
 | 
					  delegate(
 | 
				
			||||||
 | 
					    :closed_registrations_message,
 | 
				
			||||||
 | 
					    :contact_email,
 | 
				
			||||||
 | 
					    :open_registrations,
 | 
				
			||||||
 | 
					    :site_description,
 | 
				
			||||||
 | 
					    :site_extended_description,
 | 
				
			||||||
 | 
					    to: Setting
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def contact_account
 | 
				
			||||||
 | 
					    Account.find_local(Setting.site_contact_username)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def user_count
 | 
				
			||||||
 | 
					    Rails.cache.fetch('user_count') { User.count }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def status_count
 | 
				
			||||||
 | 
					    Rails.cache.fetch('local_status_count') { Status.local.count }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def domain_count
 | 
				
			||||||
 | 
					    Rails.cache.fetch('distinct_domain_count') { Account.distinct.count(:domain) }
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										30
									
								
								app/views/about/_registration.html.haml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								app/views/about/_registration.html.haml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,30 @@
 | 
				
			||||||
 | 
					= simple_form_for(new_user, url: user_registration_path) do |f|
 | 
				
			||||||
 | 
					  = f.simple_fields_for :account do |account_fields|
 | 
				
			||||||
 | 
					    = account_fields.input :username,
 | 
				
			||||||
 | 
					      autofocus: true,
 | 
				
			||||||
 | 
					      placeholder: t('simple_form.labels.defaults.username'),
 | 
				
			||||||
 | 
					      required: true,
 | 
				
			||||||
 | 
					      input_html: { 'aria-label' => t('simple_form.labels.defaults.username') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  = f.input :email,
 | 
				
			||||||
 | 
					    placeholder: t('simple_form.labels.defaults.email'),
 | 
				
			||||||
 | 
					    required: true,
 | 
				
			||||||
 | 
					    input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
 | 
				
			||||||
 | 
					  = f.input :password,
 | 
				
			||||||
 | 
					    autocomplete: "off",
 | 
				
			||||||
 | 
					    placeholder: t('simple_form.labels.defaults.password'),
 | 
				
			||||||
 | 
					    required: true,
 | 
				
			||||||
 | 
					    input_html: { 'aria-label' => t('simple_form.labels.defaults.password') }
 | 
				
			||||||
 | 
					  = f.input :password_confirmation,
 | 
				
			||||||
 | 
					    autocomplete: "off",
 | 
				
			||||||
 | 
					    placeholder: t('simple_form.labels.defaults.confirm_password'),
 | 
				
			||||||
 | 
					    required: true,
 | 
				
			||||||
 | 
					    input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password') }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .actions
 | 
				
			||||||
 | 
					    = f.button :button, t('about.get_started'), type: :submit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .info
 | 
				
			||||||
 | 
					    = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
 | 
				
			||||||
 | 
					    ·
 | 
				
			||||||
 | 
					    = link_to t('about.about_this'), about_more_path
 | 
				
			||||||
| 
						 | 
					@ -7,42 +7,42 @@
 | 
				
			||||||
      .panel
 | 
					      .panel
 | 
				
			||||||
        %h2= Rails.configuration.x.local_domain
 | 
					        %h2= Rails.configuration.x.local_domain
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        - unless @description.blank?
 | 
					        - unless @instance_presenter.site_description.blank?
 | 
				
			||||||
          %p= @description.html_safe
 | 
					          %p= @instance_presenter.site_description.html_safe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      .information-board
 | 
					      .information-board
 | 
				
			||||||
        .section
 | 
					        .section
 | 
				
			||||||
          %span= t 'about.user_count_before'
 | 
					          %span= t 'about.user_count_before'
 | 
				
			||||||
          %strong= number_with_delimiter @user_count
 | 
					          %strong= number_with_delimiter @instance_presenter.user_count
 | 
				
			||||||
          %span= t 'about.user_count_after'
 | 
					          %span= t 'about.user_count_after'
 | 
				
			||||||
        .section
 | 
					        .section
 | 
				
			||||||
          %span= t 'about.status_count_before'
 | 
					          %span= t 'about.status_count_before'
 | 
				
			||||||
          %strong= number_with_delimiter @status_count
 | 
					          %strong= number_with_delimiter @instance_presenter.status_count
 | 
				
			||||||
          %span= t 'about.status_count_after'
 | 
					          %span= t 'about.status_count_after'
 | 
				
			||||||
        .section
 | 
					        .section
 | 
				
			||||||
          %span= t 'about.domain_count_before'
 | 
					          %span= t 'about.domain_count_before'
 | 
				
			||||||
          %strong= number_with_delimiter @domain_count
 | 
					          %strong= number_with_delimiter @instance_presenter.domain_count
 | 
				
			||||||
          %span= t 'about.domain_count_after'
 | 
					          %span= t 'about.domain_count_after'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      - unless @extended_description.blank?
 | 
					      - unless @instance_presenter.site_extended_description.blank?
 | 
				
			||||||
        .panel= @extended_description.html_safe
 | 
					        .panel= @instance_presenter.site_extended_description.html_safe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    .sidebar
 | 
					    .sidebar
 | 
				
			||||||
      .panel
 | 
					      .panel
 | 
				
			||||||
        .panel-header= t 'about.contact'
 | 
					        .panel-header= t 'about.contact'
 | 
				
			||||||
        .panel-body
 | 
					        .panel-body
 | 
				
			||||||
          - if @contact_account
 | 
					          - if @instance_presenter.contact_account
 | 
				
			||||||
            .owner
 | 
					            .owner
 | 
				
			||||||
              .avatar= image_tag @contact_account.avatar.url
 | 
					              .avatar= image_tag @instance_presenter.contact_account.avatar.url
 | 
				
			||||||
              .name
 | 
					              .name
 | 
				
			||||||
                = link_to TagManager.instance.url_for(@contact_account) do
 | 
					                = link_to TagManager.instance.url_for(@instance_presenter.contact_account) do
 | 
				
			||||||
                  %span.display_name.emojify= display_name(@contact_account)
 | 
					                  %span.display_name.emojify= display_name(@instance_presenter.contact_account)
 | 
				
			||||||
                  %span.username= "@#{@contact_account.acct}"
 | 
					                  %span.username= "@#{@instance_presenter.contact_account.acct}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          - unless @contact_email.blank?
 | 
					          - unless @instance_presenter.contact_email.blank?
 | 
				
			||||||
            .contact-email
 | 
					            .contact-email
 | 
				
			||||||
              = t 'about.business_email'
 | 
					              = t 'about.business_email'
 | 
				
			||||||
              %strong= @contact_email
 | 
					              %strong= @instance_presenter.contact_email
 | 
				
			||||||
      .panel
 | 
					      .panel
 | 
				
			||||||
        .panel-header= t 'about.links'
 | 
					        .panel-header= t 'about.links'
 | 
				
			||||||
        .panel-list
 | 
					        .panel-list
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@
 | 
				
			||||||
  %meta{ property: 'og:site_name', content: site_title }/
 | 
					  %meta{ property: 'og:site_name', content: site_title }/
 | 
				
			||||||
  %meta{ property: 'og:type', content: 'website' }/
 | 
					  %meta{ property: 'og:type', content: 'website' }/
 | 
				
			||||||
  %meta{ property: 'og:title', content: Rails.configuration.x.local_domain }/
 | 
					  %meta{ property: 'og:title', content: Rails.configuration.x.local_domain }/
 | 
				
			||||||
  %meta{ property: 'og:description', content: @description.blank? ? "Mastodon is a free, open-source social network server. A decentralized alternative to commercial platforms, it avoids the risks of a single company monopolizing your communication. Anyone can run Mastodon and participate in the social network seamlessly" : strip_tags(@description) }/
 | 
					  %meta{ property: 'og:description', content: strip_tags(@instance_presenter.site_description.blank? ? t('about.about_mastodon') : @instance_presenter.site_description) }/
 | 
				
			||||||
  %meta{ property: 'og:image', content: asset_url('mastodon_small.jpg') }/
 | 
					  %meta{ property: 'og:image', content: asset_url('mastodon_small.jpg') }/
 | 
				
			||||||
  %meta{ property: 'og:image:width', content: '400' }/
 | 
					  %meta{ property: 'og:image:width', content: '400' }/
 | 
				
			||||||
  %meta{ property: 'og:image:height', content: '400' }/
 | 
					  %meta{ property: 'og:image:height', content: '400' }/
 | 
				
			||||||
| 
						 | 
					@ -24,28 +24,14 @@
 | 
				
			||||||
  .screenshot-with-signup
 | 
					  .screenshot-with-signup
 | 
				
			||||||
    .mascot= image_tag 'fluffy-elephant-friend.png'
 | 
					    .mascot= image_tag 'fluffy-elephant-friend.png'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    - if @open_registrations
 | 
					    - if @instance_presenter.open_registrations
 | 
				
			||||||
      = simple_form_for(@user, url: user_registration_path) do |f|
 | 
					      = render 'registration'
 | 
				
			||||||
        = f.simple_fields_for :account do |ff|
 | 
					 | 
				
			||||||
          = ff.input :username, autofocus: true, placeholder: t('simple_form.labels.defaults.username'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.username') }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        = f.input :email, placeholder: t('simple_form.labels.defaults.email'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.email') }
 | 
					 | 
				
			||||||
        = f.input :password, autocomplete: "off", placeholder: t('simple_form.labels.defaults.password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.password') }
 | 
					 | 
				
			||||||
        = f.input :password_confirmation, autocomplete: "off", placeholder: t('simple_form.labels.defaults.confirm_password'), required: true, input_html: { 'aria-label' => t('simple_form.labels.defaults.confirm_password') }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        .actions
 | 
					 | 
				
			||||||
          = f.button :button, t('about.get_started'), type: :submit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        .info
 | 
					 | 
				
			||||||
          = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
 | 
					 | 
				
			||||||
          ·
 | 
					 | 
				
			||||||
          = link_to t('about.about_this'), about_more_path
 | 
					 | 
				
			||||||
    - else
 | 
					    - else
 | 
				
			||||||
      .closed-registrations-message
 | 
					      .closed-registrations-message
 | 
				
			||||||
        - if @closed_registrations_message.blank?
 | 
					        - if @instance_presenter.closed_registrations_message.blank?
 | 
				
			||||||
          %p= t('about.closed_registrations')
 | 
					          %p= t('about.closed_registrations')
 | 
				
			||||||
        - else
 | 
					        - else
 | 
				
			||||||
          = @closed_registrations_message.html_safe
 | 
					          = @instance_presenter.closed_registrations_message.html_safe
 | 
				
			||||||
        .info
 | 
					        .info
 | 
				
			||||||
          = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
 | 
					          = link_to t('auth.login'), new_user_session_path, class: 'webapp-btn'
 | 
				
			||||||
          ·
 | 
					          ·
 | 
				
			||||||
| 
						 | 
					@ -85,9 +71,9 @@
 | 
				
			||||||
          = fa_icon('li check-square')
 | 
					          = fa_icon('li check-square')
 | 
				
			||||||
          = t 'about.features.api'
 | 
					          = t 'about.features.api'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - unless @description.blank?
 | 
					  - unless @instance_presenter.site_description.blank?
 | 
				
			||||||
    %h3= t('about.description_headline', domain: Rails.configuration.x.local_domain)
 | 
					    %h3= t('about.description_headline', domain: Rails.configuration.x.local_domain)
 | 
				
			||||||
    %p= @description.html_safe
 | 
					    %p= @instance_presenter.site_description.html_safe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  .actions
 | 
					  .actions
 | 
				
			||||||
    .info
 | 
					    .info
 | 
				
			||||||
| 
						 | 
					@ -188,7 +188,7 @@ Rails.application.routes.draw do
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get '/web/(*any)', to: 'home#index', as: :web
 | 
					  get '/web/(*any)', to: 'home#index', as: :web
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  get '/about',      to: 'about#index'
 | 
					  get '/about',      to: 'about#show'
 | 
				
			||||||
  get '/about/more', to: 'about#more'
 | 
					  get '/about/more', to: 'about#more'
 | 
				
			||||||
  get '/terms',      to: 'about#terms'
 | 
					  get '/terms',      to: 'about#terms'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,9 +3,16 @@ require 'rails_helper'
 | 
				
			||||||
RSpec.describe AboutController, type: :controller do
 | 
					RSpec.describe AboutController, type: :controller do
 | 
				
			||||||
  render_views
 | 
					  render_views
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  describe 'GET #index' do
 | 
					  describe 'GET #show' do
 | 
				
			||||||
    it 'returns http success' do
 | 
					    it 'returns http success' do
 | 
				
			||||||
      get :index
 | 
					      get :show
 | 
				
			||||||
 | 
					      expect(response).to have_http_status(:success)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'GET #more' do
 | 
				
			||||||
 | 
					    it 'returns http success' do
 | 
				
			||||||
 | 
					      get :more
 | 
				
			||||||
      expect(response).to have_http_status(:success)
 | 
					      expect(response).to have_http_status(:success)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										74
									
								
								spec/presenters/instance_presenter_spec.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								spec/presenters/instance_presenter_spec.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,74 @@
 | 
				
			||||||
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe InstancePresenter do
 | 
				
			||||||
 | 
					  let(:instance_presenter) { InstancePresenter.new }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "delegates site_description to Setting" do
 | 
				
			||||||
 | 
					    Setting.site_description = "Site desc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(instance_presenter.site_description).to eq "Site desc"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "delegates site_extended_description to Setting" do
 | 
				
			||||||
 | 
					    Setting.site_extended_description = "Extended desc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(instance_presenter.site_extended_description).to eq "Extended desc"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "delegates open_registrations to Setting" do
 | 
				
			||||||
 | 
					    Setting.open_registrations = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(instance_presenter.open_registrations).to eq false
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "delegates closed_registrations_message to Setting" do
 | 
				
			||||||
 | 
					    Setting.closed_registrations_message = "Closed message"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(instance_presenter.closed_registrations_message).to eq "Closed message"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  it "delegates contact_email to Setting" do
 | 
				
			||||||
 | 
					    Setting.contact_email = "admin@example.com"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    expect(instance_presenter.contact_email).to eq "admin@example.com"
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "contact_account" do
 | 
				
			||||||
 | 
					    it "returns the account for the site contact username" do
 | 
				
			||||||
 | 
					      Setting.site_contact_username = "aaa"
 | 
				
			||||||
 | 
					      account = Fabricate(:account, username: "aaa")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(instance_presenter.contact_account).to eq(account)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "user_count" do
 | 
				
			||||||
 | 
					    it "returns the number of site users" do
 | 
				
			||||||
 | 
					      cache = double
 | 
				
			||||||
 | 
					      allow(Rails).to receive(:cache).and_return(cache)
 | 
				
			||||||
 | 
					      allow(cache).to receive(:fetch).with("user_count").and_return(123)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(instance_presenter.user_count).to eq(123)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "status_count" do
 | 
				
			||||||
 | 
					    it "returns the number of local statuses" do
 | 
				
			||||||
 | 
					      cache = double
 | 
				
			||||||
 | 
					      allow(Rails).to receive(:cache).and_return(cache)
 | 
				
			||||||
 | 
					      allow(cache).to receive(:fetch).with("local_status_count").and_return(234)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(instance_presenter.status_count).to eq(234)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "domain_count" do
 | 
				
			||||||
 | 
					    it "returns the number of known domains" do
 | 
				
			||||||
 | 
					      cache = double
 | 
				
			||||||
 | 
					      allow(Rails).to receive(:cache).and_return(cache)
 | 
				
			||||||
 | 
					      allow(cache).to receive(:fetch).with("distinct_domain_count").and_return(345)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      expect(instance_presenter.domain_count).to eq(345)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue