84 lines
3.0 KiB
Ruby
84 lines
3.0 KiB
Ruby
|
require 'ostruct'
|
||
|
require_relative '../../spec_helper'
|
||
|
require_relative '../../../app/models/visualization/name_generator'
|
||
|
|
||
|
include CartoDB
|
||
|
|
||
|
describe Visualization::NameGenerator do
|
||
|
describe '#generate' do
|
||
|
it 'returns the candidate name if available' do
|
||
|
user = Object.new
|
||
|
candidate = 'Non existing name'
|
||
|
checker = positive_checker
|
||
|
generator = Visualization::NameGenerator.new(user, checker)
|
||
|
generator.name(candidate).should == candidate
|
||
|
end
|
||
|
|
||
|
it 'returns an altered name if no available candidate' do
|
||
|
user = Object.new
|
||
|
existing = 'visualization 1'
|
||
|
checker = negative_checker
|
||
|
generator = Visualization::NameGenerator.new(user, checker)
|
||
|
|
||
|
generator.name(existing).should_not == existing
|
||
|
end
|
||
|
|
||
|
it 'returns a generated name if no candidate' do
|
||
|
user = Object.new
|
||
|
checker = negative_checker
|
||
|
generator = Visualization::NameGenerator.new(user, checker)
|
||
|
|
||
|
generator.name.should =~ /#{Visualization::NameGenerator::PATTERN}/
|
||
|
end
|
||
|
|
||
|
it 'accepts names with non-ASCII characters' do
|
||
|
user = Object.new
|
||
|
checker = positive_checker
|
||
|
candidate = 'Me gustan los ñúes'
|
||
|
generator = Visualization::NameGenerator.new(user, checker)
|
||
|
generator.name(candidate).should == candidate
|
||
|
end
|
||
|
|
||
|
it 'strips leading and trailing whitespace from candidates' do
|
||
|
user = Object.new
|
||
|
checker = positive_checker
|
||
|
candidate = ' viva la pepa '
|
||
|
generator = Visualization::NameGenerator.new(user, checker)
|
||
|
generator.name(candidate).should == 'viva la pepa'
|
||
|
end
|
||
|
|
||
|
it 'assigns a valid name if a explicit nil candidate is passed' do
|
||
|
user = Object.new
|
||
|
checker = positive_checker
|
||
|
candidate = ' viva la pepa '
|
||
|
generator = Visualization::NameGenerator.new(user, checker)
|
||
|
generator.name(nil).should == Visualization::NameGenerator::PATTERN
|
||
|
end
|
||
|
|
||
|
it 'assigns an incremental number' do
|
||
|
user = Object.new
|
||
|
candidate = 'Untitled map'
|
||
|
Visualization::NameGenerator.new(user, negative_checker([])).name(candidate).should == candidate
|
||
|
Visualization::NameGenerator.new(user, negative_checker([candidate])).name(candidate).should == "#{candidate} 1"
|
||
|
Visualization::NameGenerator.new(user, negative_checker([candidate, "#{candidate} 1"])).name(candidate).should == "#{candidate} 2"
|
||
|
Visualization::NameGenerator.new(user, negative_checker([candidate, "#{candidate} 1", "#{candidate} 2"])).name(candidate).should == "#{candidate} 3"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def positive_checker
|
||
|
checker = Object.new
|
||
|
def checker.available?(*args); true; end
|
||
|
checker
|
||
|
end
|
||
|
|
||
|
def negative_checker(existing = [ 'visualization 1', 'Untitled visualization', 'Untitled visualization 0', 'Untitled visualization 1'])
|
||
|
checker = OpenStruct.new
|
||
|
checker.existing = existing
|
||
|
def checker.available?(candidate)
|
||
|
!existing.include?(candidate)
|
||
|
end
|
||
|
checker
|
||
|
end
|
||
|
end
|
||
|
|