require 'Yajl'
require 'sinatra'
require 'picky-client'
require 'spec_helper'

describe 'Sinatra Index Actions' do
  
  # This is the application that is tested.
  #
  class MyPickyServer < Sinatra::Base
    extend Picky::Sinatra::IndexActions
    
    data = Picky::Index.new :index do
      category :name
      category :surname
    end
    
    people = Picky::Search.new data
    
    get '/people' do
      results = people.search params[:query], params[:ids] || 20, params[:offset] || 0
      results.to_json
    end
  end
  
  describe 'updating' do
    before(:each) do
      Picky::Indexes.clear
    end
    let(:request) { ::Rack::MockRequest.new MyPickyServer }
    it 'should update the index correctly' do
      request.post('/', params: { index: 'index', data: %Q{{ "id":"1", "name":"Florian", "surname":"Hanke" }} })
      
      results = Yajl::Parser.parse request.get('/people', params: { query: 'florian' }).body
      results['total'].should == 1
      
      request.post('/', params: { index: 'index', data: %Q{{ "id":"2", "name":"Florian", "surname":"Meier" }} })
      
      results = Yajl::Parser.parse request.get('/people', params: { query: 'florian' }).body
      results['total'].should == 2
    end
    it 'should delete entries from the index correctly' do
      request.post('/', params: { index: 'index', data: %Q{{ "id":"1", "name":"Florian", "surname":"Hanke" }} })
      request.post('/', params: { index: 'index', data: %Q{{ "id":"2", "name":"Florian", "surname":"Meier" }} })
      
      results = Yajl::Parser.parse request.get('/people', params: { query: 'florian' }).body
      results['total'].should == 2
      
      request.delete('/', params: { index: 'index', data: %Q{{ "id":"1" }} })
      
      results = Yajl::Parser.parse request.get('/people', params: { query: 'florian' }).body
      results['total'].should == 1
    end
    it 'should have no problem with a superfluous delete' do
      request.delete('/', params: { index: 'index', data: %Q{{ "id":"1" }} })
      
      results = Yajl::Parser.parse request.get('/people', params: { query: 'florian' }).body
      results['total'].should == 0
    end
  end
  
end