Commit 2b450d0c

mo khan <mo@mokhan.ca>
2015-01-11 16:39:08
add tests for searching cakes.
1 parent 227bdd2
Changed files (5)
app
controllers
models
spec
app/controllers/api/v2/cakes_controller.rb
@@ -7,7 +7,7 @@ module Api
       end
 
       def index
-        @cakes = @repository.search_with(params).includes(:category).page(page).per(per_page)
+        @cakes = paginate(@repository.search_with(params).includes(:category))
       end
 
       def show(id = params[:id])
app/controllers/concerns/pageable.rb
@@ -9,4 +9,8 @@ module Pageable
   def per_page
     params[:per_page] || DEFAULT_PER_PAGE
   end
+
+  def paginate(items)
+    items.page(page).per(per_page)
+  end
 end
app/models/creation.rb
@@ -1,7 +1,7 @@
 class Creation < ActiveRecord::Base
   validates :name, presence: true
   validates :category_id, presence: true
-  belongs_to :user, :counter_cache => true
+  belongs_to :user, counter_cache: true
   belongs_to :category
   has_many :photos, -> { order :created_at }, dependent: :destroy, as: :imageable
   has_many :favorites, :dependent => :destroy
spec/controllers/api/v2/cakes_controller_spec.rb
@@ -6,10 +6,32 @@ module Api
       render_views
 
       describe "#index" do
-        let!(:cake) { create(:published_cake) }
+        let!(:cakes) { create(:category, slug: 'cakes') }
+        let!(:cookies) { create(:category, slug: 'cookies') }
+        let!(:cake) { create(:published_cake, name: 'cake', category: cakes) }
+        let!(:cookie) { create(:published_cake, name: 'cookie', category: cookies) }
+        let!(:unpublished_cake) { create(:cake, name: 'unpublished', category: cakes) }
 
-        it 'returns all cakes in the page' do
+        it 'returns all published cakes' do
           xhr :get, :index
+          expect(assigns(:cakes)).to match_array([cake, cookie])
+        end
+
+        it 'returns all cakes in the category' do
+          xhr :get, :index, category: cookie.category.slug
+          expect(assigns(:cakes)).to match_array([cookie])
+        end
+
+        it 'returns all cakes matching the search query' do
+          xhr :get, :index, q: cake.name[0..2]
+          expect(assigns(:cakes)).to match_array([cake])
+        end
+
+        it 'returns all cakes tagged with the tag' do
+          cake.tag_list = 'cakes'
+          cake.save!
+
+          xhr :get, :index, tags: 'cakes'
           expect(assigns(:cakes)).to match_array([cake])
         end
       end
spec/factories.rb
@@ -15,6 +15,7 @@ FactoryGirl.define do
     association :user
     association :category
     factory :published_cake do
+      photos_count 1
       after(:create) do |cake, evaluator|
         cake.photos << create(:photo, image: 'spec/fixtures/images/example.png')
       end
@@ -81,4 +82,4 @@ FactoryGirl.define do
     name { Faker::Name.name }
     asin { SecureRandom.uuid }
   end
-end
\ No newline at end of file
+end