require_relative '../test_helper'
require 'rails/all'
require_relative 'abstract_controller'
require_relative '../models/user'
describe RenderSync::Partial do
include TestHelper
before do
@context = ActionController::Base.new
@partial = RenderSync::Partial.new("show", User.new, nil, @context)
end
describe '#self.all' do
it 'returns an array of all Partials for given model' do
assert_equal 1, RenderSync::Partial.all(User.new, @context).size
assert_equal RenderSync::Partial, RenderSync::Partial.all(User.new, @context)[0].class
end
end
describe '#self.find' do
it 'finds partial given resource and partial name' do
Dir.stubs(:[]).returns("_show.html.erb")
assert_equal RenderSync::Partial, RenderSync::Partial.find(User.new, 'show', nil).class
end
it 'returns nil if partial does not exist' do
Dir.stubs(:[]).returns []
refute RenderSync::Partial.find(User.new, 'not_exist', nil)
end
end
describe '#render_to_string' do
it 'renders itself as a string' do
assert_equal "
1<\/h1>", @partial.render_to_string
end
end
describe '#render' do
it 'renders' do
# TODO stub out
assert @partial.respond_to?(:render)
end
end
describe '#sync' do
it 'sends update to faye for given partial and update action' do
# TODO stub out
assert @partial.sync(:update)
end
it 'sends update to faye for given partial and destroy action' do
# TODO stub out
assert @partial.sync(:destroy)
end
end
describe '#message' do
it 'returns a Message instance for the partial for the update action' do
assert_equal RenderSync.client.class::Message, @partial.message(:update).class
end
it 'returns a Message instance for the partial for the destroy action' do
assert_equal RenderSync.client.class::Message, @partial.message(:destroy).class
end
end
describe '#channel_prefix' do
it 'returns a unique channel prefix for the partial given its name and resource' do
assert @partial.channel_prefix
end
end
describe 'channel_for_action' do
it 'returns the channel for the update action' do
assert @partial.channel_for_action(:update)
end
it 'returns the channel for the destroy action' do
assert @partial.channel_for_action(:destroy)
end
it 'always starts with a forward slash to provide Faye valid channel' do
assert_equal "/", @partial.channel_for_action(:update).first
assert_equal "/", @partial.channel_for_action(:destroy).first
end
end
describe '#selector_start' do
it 'returns a string for the selector to mark element beginning' do
assert @partial.selector_start.present?
end
end
describe '#selector_end' do
it 'returns a string for the selector to mark element ending' do
assert @partial.selector_end.present?
end
end
describe 'creator_for_scope' do
it 'returns a new PartialCreator for given scope' do
assert_equal RenderSync::PartialCreator, @partial.creator_for_scope(nil).class
assert @partial, @partial.creator_for_scope(nil).partial
end
end
end