# frozen_string_literal: true

require 'rails_helper'

describe SystemNotificationsController, type: :controller do
  login_user
  render_views
  let(:user) { subject.current_user }

  describe 'Methods' do
    let(:notifcation_one) { create :system_notification }
    let(:notifcation_two) { create :system_notification, title: 'Special one' }
    before do
      create :user_system_notification,
             user: user,
             system_notification: notifcation_one
      create :user_system_notification,
             user: user,
             system_notification: notifcation_two
    end

    it '#show return right result format' do
      params = {
        id: user.user_system_notifications.first.system_notification_id
      }
      get :show, format: :json, params: params
      expect(response).to have_http_status(:ok)
      body = JSON.parse(response.body)
      expect(body).to include('id', 'modal_title', 'modal_body')
    end

    it '#mark_as_seen correctly set seen_at' do
      params = {
        notifications: user.user_system_notifications
                           .map(&:system_notification_id).to_s
      }
      get :mark_as_seen, format: :json, params: params
      expect(response).to have_http_status(:ok)
      body = JSON.parse(response.body)
      expect(body['result']).to eq 'ok'
      expect(user.user_system_notifications.where(seen_at: nil).count).to eq 0
    end

    it '#mark_as_read correctly set read_at' do
      params = {
        id: user.user_system_notifications.first.system_notification_id
      }
      get :mark_as_read, format: :json, params: params
      expect(response).to have_http_status(:ok)
      body = JSON.parse(response.body)
      expect(body['result']).to eq 'ok'
      expect(user.user_system_notifications.where(read_at: nil).count).to eq 1
    end

    it '#unseen_counter return right result' do
      get :unseen_counter, format: :json
      expect(response).to have_http_status(:ok)
      body = JSON.parse(response.body)
      expect(body['notificationNmber']).to eq 2
    end

    it '#index check next page link' do
      notifications = create_list :system_notification, 50
      notifications.each do |i|
        create :user_system_notification,
               user: user,
               system_notification: i
      end
      get :index, format: :json
      expect(response).to have_http_status(:ok)
      body = JSON.parse(response.body)
      expect(body['more_url']).to include('system_notifications.json?page=2')
    end
  end
end