master
 1require "rails_helper"
 2
 3describe Creation::Repository do
 4  describe "#tagged" do
 5    let(:user) { create(:user) }
 6    let(:tag) { "cake" }
 7    let(:tagged_cake) { create(:creation, photos_count: 1) }
 8    let(:untagged_cake) { create(:creation) }
 9
10    before :each do
11      user.tag(tagged_cake, with: tag, on: :tags)
12    end
13
14    it "returns each cake that is tagged" do
15      expect(subject.tagged(tag)).to include(tagged_cake)
16    end
17
18    it "does not return cakes that are not tagged" do
19      expect(subject.tagged(tag)).to_not include(untagged_cake)
20    end
21  end
22
23  describe "#published" do
24    let!(:user){ create(:user) }
25    let!(:published_cake){ create(:creation, user: user) }
26
27    before :each do
28      published_cake.photos.create(image: "example.png", image_processing: nil)
29    end
30
31    let(:results) { subject.published }
32
33    it "returns cakes that do not have photos that are processing" do
34      expect(results.count).to eql(1)
35      expect(results).to match_array([published_cake])
36    end
37  end
38
39  describe "#search" do
40    let(:cake) { create(:creation, name: "Cake") }
41    let(:cup_cake) { create(:creation, name: "Cup Cake") }
42
43    it "returns cakes with a matching name" do
44      expect(subject.search("cake")).to match_array([cake])
45    end
46  end
47
48  context "#search_with" do
49    let(:cake_category) { create(:category) }
50    let(:cookie_category) { create(:category) }
51    let!(:cake) { create(:cake, name: "cake", category: cake_category) }
52    let!(:cookie) { create(:cake, name: "cookie", category: cookie_category) }
53
54    before :each do
55      cake.photos << create(:photo)
56      cookie.photos << create(:photo)
57    end
58
59    it "returns all cakes in a specific category" do
60      cakes = subject.search_with(category: cake_category.slug)
61      expect(cakes).to match_array([cake])
62    end
63
64    it "returns all cakes that match the search query" do
65      cakes = subject.search_with(q: cake.name[0..6])
66      expect(cakes).to match_array([cake])
67    end
68  end
69end