blob: 3f2aa0d4bcec46b305dc9c2a2f57a304917da65c [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'predictionio'
require 'spec_helper'
describe PredictionIO do
let(:access_key) { 1 }
let(:event_client) { PredictionIO::EventClient.new(access_key, 'http://fakeapi.com:7070', 10) }
let(:engine_client) { PredictionIO::EngineClient.new('http://fakeapi.com:8000', 10) }
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
context 'with http stub (for channel test)' do
before(:each) do
success_response = Net::HTTPCreated.new('HTTP/1.1', '201', 'Created')
success_response.body = JSON.generate(eventId: 'deadbeef00')
expect_any_instance_of(PredictionIO::Connection).to receive(:apost).and_return(double(get: success_response))
end
it 'create_event should have channel option (symbol)' do
expect(PredictionIO::AsyncRequest).
to receive(:new).with("/events.json?accessKey=#{access_key}&channel=test-channel",
{
"eventTime" => "2017-03-22T12:26:35+03:00", "event" => "$set",
"entityType" => "Session", "entityId" => "42"
}.to_json)
event_client.create_event('$set', 'Session', '42',
{channel: 'test-channel', 'eventTime' => "2017-03-22T12:26:35+03:00"})
end
it 'create_event should process channel option (string)' do
expect(PredictionIO::AsyncRequest).
to receive(:new).with("/events.json?accessKey=#{access_key}&channel=test-channel",
{
"eventTime" => "2017-03-22T12:26:35+03:00", "event" => "$set",
"entityType" => "Session", "entityId" => "42"
}.to_json)
response = event_client.create_event('$set', 'Session', '42',
{ 'channel' => 'test-channel', 'eventTime' => "2017-03-22T12:26:35+03:00" })
expect(response.code).to eq('201')
end
it 'create_event should work without channel option' do
expect(PredictionIO::AsyncRequest).
to receive(:new).with("/events.json?accessKey=#{access_key}",
{
"eventTime" => "2017-03-22T12:26:35+03:00", "event" => "$set",
"entityType" => "Session", "entityId" => "42"
}.to_json)
response = event_client.create_event('$set', 'Session', '42',
{ 'eventTime' => "2017-03-22T12:26:35+03:00" })
expect(response.code).to eq('201')
end
end
it 'create_event should post real request with channel option' do
response = event_client.create_event('$set', 'Session', '42',
{ 'channel' => 'test-channel', 'eventTime' => "2017-03-22T12:26:35+03:00" })
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