require 'predictionio'
require 'spec_helper'

event_client = PredictionIO::EventClient.new(1, 'http://fakeapi.com:7070', 10)
engine_client = PredictionIO::EngineClient.new('http://fakeapi.com:8000', 10)

describe PredictionIO do
  describe 'Events API' do
    it 'create_event should create an event' do
      response = event_client.create_event('register', 'user', 'foobar')
      expect(response.code).to eq('201')
    end

    it 'create_event should not raise an error' do
      response = event_client.create_event('register', 'user', 'foobar')
      expect{ response }.to_not raise_error
    end

    it 'set_user should set user properties' do
      response = event_client.set_user('foobar')
      expect(response.code).to eq('201')
    end

    it 'set_user should not raise an error' do
      response = event_client.set_user('foobar')
      expect{ response }.to_not raise_error
    end

    it 'unset_user should unset user properties' do
      response = event_client.unset_user('foobar', 'properties' => { 'bar' => 'baz' })
      expect(response.code).to eq('201')
    end

    it 'unset_user should not raise an error' do
      response = event_client.unset_user('foobar', 'properties' => { 'bar' => 'baz' })
      expect{ response }.to_not raise_error
    end

    it 'set_item should set item properties' do
      response = event_client.set_item('foobar')
      expect(response.code).to eq('201')
    end

    it 'set_item should should not raise an error' do
      response = event_client.set_item('foobar')
      expect{ response }.to_not raise_error
    end

    it 'unset_item should unset item properties' do
      response = event_client.unset_item('foobar', 'properties' => { 'bar' => 'baz' })
      expect(response.code).to eq('201')
    end

    it 'unset_item should not raise an error' do
      response = event_client.unset_item('foobar', 'properties' => { 'bar' => 'baz' })
      expect{ response }.to_not raise_error
    end

    it 'record_user_action_on_item should record a U2I action' do
      response = event_client.record_user_action_on_item('greet', 'foobar', 'barbaz', 'properties' => { 'dead' => 'beef' })
      expect(response.code).to eq('201')
    end

    it 'record_user_action_on_item should not raise an error' do
      response = event_client.record_user_action_on_item('greet', 'foobar', 'barbaz', 'properties' => { 'dead' => 'beef' })
      expect{ response }.to_not raise_error
    end

    it 'delete_user should delete a user' do
      response = event_client.delete_user('foobar')
      expect(response.code).to eq('201')
    end

    it 'delete_user should not raise an error' do
      response = event_client.delete_user('foobar')
      expect{ response }.to_not raise_error
    end

    it 'delete_item should delete an item' do
      response = event_client.delete_item('foobar')
      expect(response.code).to eq('201')
    end

    it 'delete_item should not raise an error' do
      response = event_client.delete_item('foobar')
      expect{ response }.to_not raise_error
    end
  end

  describe 'Engine Client' do
    it 'send_query should get predictions' do
      predictions = engine_client.send_query('uid' => 'foobar')
      expect(predictions).to eq('iids' => %w(dead beef))
    end
  end
end
