# frozen_string_literal: true require 'rspec' require_relative '../../lib/chotto/message' require_relative '../../lib/chotto/helpers' RSpec.describe Chotto::Message do let(:tags) { [] } let(:msg) { double('Notmuch::Message', tags: tags) } let(:db_double) { double('Chotto::Database') } let(:subject) { Chotto::Message.new(msg: msg, db: db_double) } it 'reads headers' do expect(msg).to receive(:header).with('A-Header') subject.a_header end describe 'tags' do it 'keeps tags state in memory' do subject.tags << 'tag' expect(subject.tags).to match ['tag'] subject.tags << 'tag2' expect(subject.tags).to match %w[tag tag2] end it 'allows to overwritte entire tags array' do subject.tags = [1, 2, 3, 4] expect(subject.tags).to match [1, 2, 3, 4] end end describe 'save!' do let(:tags) { [1, 2, 3] } it 'saves current tag array to db' do expect(msg).to receive(:remove_all_tags) tags.each do |tag| expect(msg).to receive(:add_tag).with(tag.to_s) end subject.tags = tags subject.save! end end describe 'thread' do let(:thread_id) { '1' } let(:tester) { double } let(:msg_in_thread) { double('Chotto:Message') } it 'fetches messages for thread' do expect(msg).to receive(:thread_id).and_return(thread_id) expect(db_double).to receive(:search_messages).with("thread:#{thread_id}").and_return([msg_in_thread]) expect(msg_in_thread).to receive(:tags) expect(tester).to receive(:test).with(an_instance_of(Chotto::Message)) subject.thread.each do |msg| tester.test(msg) end end end end