status_spec.rb 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. RSpec.describe MonitoringHelper::Status do
  4. let(:instance) { described_class.new }
  5. describe '#fetch_status' do
  6. before do
  7. allow(instance).to receive(:counts).and_return(:count)
  8. allow(instance).to receive(:last_created_at).and_return(:created)
  9. allow(instance).to receive(:last_login).and_return(:login)
  10. allow(instance).to receive(:agents_count).and_return(:agents)
  11. allow(instance).to receive(:storage).and_return(:storage_size)
  12. end
  13. it 'returns output of computation methods' do
  14. expect(instance.fetch_status).to include(
  15. counts: :count, last_created_at: :created, last_login: :login, agents: :agents, storage: :storage_size
  16. )
  17. end
  18. end
  19. describe '#last_login' do
  20. it 'returns nil if no last login' do
  21. expect(instance.send(:last_login)).to be_nil
  22. end
  23. it 'returns latest last_login' do
  24. freeze_time
  25. create(:agent, last_login: 2.days.ago)
  26. create(:agent, last_login: 1.day.ago)
  27. expect(instance.send(:last_login)).to eq 1.day.ago
  28. end
  29. end
  30. describe '#agents_count' do
  31. it 'returns count of agents' do
  32. create_list(:agent, 5)
  33. create_list(:customer, 5)
  34. expect(instance.send(:agents_count)).to be 5
  35. end
  36. end
  37. describe '#counts' do
  38. include_context 'basic Knowledge Base'
  39. before do
  40. stub_const("#{described_class}::INCLUDE_CLASSES", [KnowledgeBase::Category, KnowledgeBase::Answer])
  41. end
  42. it 'counts items' do
  43. published_answer && draft_answer
  44. expect(instance.send(:counts)).to eq({ 'knowledge_base_categories' => 1, 'knowledge_base_answers' => 2 })
  45. end
  46. end
  47. describe '#last_created_at' do
  48. include_context 'basic Knowledge Base'
  49. before do
  50. stub_const("#{described_class}::INCLUDE_CLASSES", [KnowledgeBase::Category, KnowledgeBase::Answer])
  51. freeze_time
  52. category
  53. travel 12.hours
  54. published_answer
  55. travel 12.hours
  56. draft_answer
  57. end
  58. it 'counts items' do
  59. expect(instance.send(:last_created_at)).to eq({ 'knowledge_base_categories' => 1.day.ago, 'knowledge_base_answers' => Time.current })
  60. end
  61. end
  62. describe '#storage' do
  63. case ActiveRecord::Base.connection_db_config.configuration_hash[:adapter]
  64. when 'postgresql'
  65. it 'returns size of attached files' do
  66. 20.times { create(:store_image).update! size: 65_000_000 }
  67. expect(instance.send(:storage)).to include({ kB: 1_269_531, MB: 1239, GB: 1 })
  68. end
  69. it 'returns nil if no files attached' do # rubocop:disable RSpec/RepeatedExample
  70. expect(instance.send(:storage)).to be_nil
  71. end
  72. when 'mysql'
  73. it 'returns nil' do # rubocop:disable RSpec/RepeatedExample
  74. expect(instance.send(:storage)).to be_nil
  75. end
  76. end
  77. end
  78. end