spec/kamerling/repos_spec.rb in kamerling-0.0.2 vs spec/kamerling/repos_spec.rb in kamerling-0.0.3

- old
+ new

@@ -1,136 +1,148 @@ +require 'sequel' require_relative '../spec_helper' +require_relative '../../lib/kamerling/addr' +require_relative '../../lib/kamerling/client' +require_relative '../../lib/kamerling/project' +require_relative '../../lib/kamerling/registration' +require_relative '../../lib/kamerling/repo' +require_relative '../../lib/kamerling/repos' +require_relative '../../lib/kamerling/result' +require_relative '../../lib/kamerling/task' +require_relative '../../lib/kamerling/uuid' -module Kamerling describe Repos do - describe '.<<' do - it 'shuffles the object into the right repo' do - Repos.repos = { Object => repo = fake(:repo) } - Repos.<< object = Object.new - repo.must_have_received :<<, [object] - end +module Kamerling + describe Repos do + describe '.<<' do + it 'shuffles the object into the right repo' do + Repos.repos = { Object => repo = fake(:repo) } + Repos.<< object = Object.new + repo.must_have_received :<<, [object] + end - it 'can be chained' do - str_repo, sym_repo = fake(:repo), fake(:repo) - Repos.repos = { String => str_repo, Symbol => sym_repo } - Repos << 'str' << :sym - str_repo.must_have_received :<<, ['str'] - sym_repo.must_have_received :<<, [:sym] + it 'can be chained' do + str_repo, sym_repo = fake(:repo), fake(:repo) + Repos.repos = { String => str_repo, Symbol => sym_repo } + Repos << 'str' << :sym + str_repo.must_have_received :<<, ['str'] + sym_repo.must_have_received :<<, [:sym] + end end - end - describe '.[]' do - it 'allows querying for repository objects' do - client = fake :client, uuid: UUID.new - Repos.repos = { Client => {} } - Repos[Client][client.uuid].must_be_nil - Repos.repos = { Client => { client.uuid => client } } - Repos[Client][client.uuid].must_equal client + describe '.[]' do + it 'allows querying for repository objects' do + client = Client.new + Repos.repos = { Client => {} } + Repos[Client][client.uuid].must_be_nil + Repos.repos = { Client => { client.uuid => client } } + Repos[Client][client.uuid].must_equal client + end end - end - describe '.clients' do - it 'returns all clients' do - Repos.repos = { Client => fake(:repo, all: all_clients = fake) } - Repos.clients.must_equal all_clients + describe '.clients' do + it 'returns all clients' do + Repos.repos = { Client => fake(:repo, all: all_clients = fake) } + Repos.clients.must_equal all_clients + end end - end - describe '.clients_for' do - it 'returns all clients for the given project' do - clients = [fake(:client), fake(:client)] - project = fake :project - regs = clients.map { |client| fake :registration, client: client } - reg_repo = fake :repo - stub(reg_repo).related_to(project) { regs } - Repos.repos = { Registration => reg_repo } - Repos.clients_for(project).must_equal clients + describe '.clients_for' do + it 'returns all clients for the given project' do + clients = [Client.new, Client.new] + project = Project.new + regs = clients.map { |client| Registration.new(client: client) } + reg_repo = fake(:repo) + stub(reg_repo).related_to(project) { regs } + Repos.repos = { Registration => reg_repo } + Repos.clients_for(project).must_equal clients + end end - end - describe '.db=' do - it 'auto-migrates the passed db' do - db = Sequel.sqlite - warn_off { db.tables.wont_include :schema_info } - Repos.db = db - warn_off { db.tables.must_include :schema_info } + describe '.db=' do + it 'auto-migrates the passed db' do + db = Sequel.sqlite + warn_off { db.tables.wont_include :schema_info } + Repos.db = db + warn_off { db.tables.must_include :schema_info } + end end - end - describe '.free_clients_for' do - it 'returns free clients for the given project' do - busy_client = fake :client, busy: true - free_client = fake :client, busy: false - busy_reg = fake :registration, client: busy_client - free_reg = fake :registration, client: free_client - project = fake :project - repo = fake :repo - stub(repo).related_to(project) { [busy_reg, free_reg] } - Repos.repos = { Registration => repo } - Repos.free_clients_for(project).must_equal [free_client] + describe '.free_clients_for' do + it 'returns free clients for the given project' do + busy_client = Client.new(busy: true) + free_client = Client.new(busy: false) + busy_reg = Registration.new(client: busy_client) + free_reg = Registration.new(client: free_client) + project = Project.new + repo = fake(:repo) + stub(repo).related_to(project) { [busy_reg, free_reg] } + Repos.repos = { Registration => repo } + Repos.free_clients_for(project).must_equal [free_client] + end end - end - describe '.next_task_for' do - it 'returns the next task for the given project' do - project = fake :project - done_task = fake :task, done: true - new_task = fake :task, done: false - repo = fake :repo - stub(repo).related_to(project) { [done_task, new_task] } - Repos.repos = { Task => repo } - Repos.next_task_for(project).must_equal new_task + describe '.next_task_for' do + it 'returns the next task for the given project' do + project = Project.new + done_task = Task.new(done: true) + new_task = Task.new(done: false) + repo = fake(:repo) + stub(repo).related_to(project) { [done_task, new_task] } + Repos.repos = { Task => repo } + Repos.next_task_for(project).must_equal new_task + end end - end - describe '.project' do - it 'returns the project with the given UUID' do - gimps = fake :project, uuid: UUID.new - Repos.repos = { Project => { gimps.uuid => gimps } } - Repos.project(gimps.uuid).must_equal gimps + describe '.project' do + it 'returns the project with the given UUID' do + gimps = Project.new + Repos.repos = { Project => { gimps.uuid => gimps } } + Repos.project(gimps.uuid).must_equal gimps + end end - end - describe '.projects' do - it 'returns all projects' do - Repos.repos = { Project => fake(:repo, all: all_projects = fake) } - Repos.projects.must_equal all_projects + describe '.projects' do + it 'returns all projects' do + Repos.repos = { Project => fake(:repo, all: all_projects = fake) } + Repos.projects.must_equal all_projects + end end - end - describe '.tasks_for' do - it 'returns all tasks for the given project' do - project = fake :project - tasks = [fake(:task), fake(:task)] - task_repo = fake :repo - stub(task_repo).related_to(project) { tasks } - Repos.repos = { Task => task_repo } - Repos.tasks_for(project).must_equal tasks + describe '.tasks_for' do + it 'returns all tasks for the given project' do + project = Project.new + tasks = [Task.new, Task.new] + task_repo = fake(:repo) + stub(task_repo).related_to(project) { tasks } + Repos.repos = { Task => task_repo } + Repos.tasks_for(project).must_equal tasks + end end - end - describe 'when working on actual database' do - before { Repos.db = Sequel.sqlite } + describe 'when working on actual database' do + before { Repos.db = Sequel.sqlite } - it 'makes sure objects can be stored and retrieved' do - addr = Addr['127.0.0.1', 1981, :TCP] - client = Client.new addr: addr, uuid: UUID.new - project = Project.new name: 'project name', uuid: UUID.new - task = Task.new data: 'data', project: project, uuid: UUID.new - reg = Registration.new addr: addr, client: client, project: project - res = Result.new addr: addr, client: client, data: 'da', task: task - Repos << client << project << task << reg << res - Repos[Client][client.uuid].must_equal client - Repos[Project][project.uuid].must_equal project - Repos[Registration][reg.uuid].must_equal reg - Repos[Result][res.uuid].must_equal res - Repos[Task][task.uuid].must_equal task - end + it 'makes sure objects can be stored and retrieved' do + addr = Addr['127.0.0.1', 1981, :TCP] + client = Client.new(addr: addr) + project = Project.new(name: 'project name', uuid: UUID.new) + task = Task.new(data: 'data', project: project, uuid: UUID.new) + reg = Registration.new(addr: addr, client: client, project: project) + res = Result.new(addr: addr, client: client, data: 'da', task: task) + Repos << client << project << task << reg << res + Repos[Client][client.uuid].must_equal client + Repos[Project][project.uuid].must_equal project + Repos[Registration][reg.uuid].must_equal reg + Repos[Result][res.uuid].must_equal res + Repos[Task][task.uuid].must_equal task + end - it 'makes sure objects can be updated' do - client = Client.new addr: Addr['127.0.0.1', 1979, :TCP], uuid: UUID.new - Repos << client - client.addr.port = 1981 - Repos << client - Repos[Client][client.uuid].addr.port.must_equal 1981 + it 'makes sure objects can be updated' do + client = Client.new(addr: Addr['127.0.0.1', 1979, :TCP]) + Repos << client + client.busy = true + Repos << client + assert Repos[Client][client.uuid].busy + end end end -end end +end