summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/family_tree.rb15
-rw-r--r--lib/family_tree_manager.rb8
-rw-r--r--spec/family_tree_manager_spec.rb14
-rw-r--r--spec/family_tree_spec.rb40
4 files changed, 72 insertions, 5 deletions
diff --git a/lib/family_tree.rb b/lib/family_tree.rb
new file mode 100644
index 0000000..934d32e
--- /dev/null
+++ b/lib/family_tree.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+class FamilyTree
+ def initialize
+ @people = []
+ end
+
+ def add_child(*params)
+ puts "Adding Child with params: #{params.join(', ')}"
+ end
+
+ def query_hierarchy(*params)
+ puts "Querying Hierarcy with params: #{params.join(', ')}"
+ end
+end
diff --git a/lib/family_tree_manager.rb b/lib/family_tree_manager.rb
index 6b0bc12..56ab992 100644
--- a/lib/family_tree_manager.rb
+++ b/lib/family_tree_manager.rb
@@ -2,18 +2,20 @@
require 'singleton'
+require_relative 'family_tree'
+
class FamilyTreeManager
include Singleton
def initialize
- @family_members = {}
+ @family_tree = FamilyTree.new
end
def add_child(*params)
- puts "Adding Child with params: #{params.join(', ')}"
+ @family_tree.add_child(*params)
end
def query_hierarchy(*params)
- puts "Querying Hierarcy with params: #{params.join(', ')}"
+ @family_tree.query_hierarchy(*params)
end
end
diff --git a/spec/family_tree_manager_spec.rb b/spec/family_tree_manager_spec.rb
index d3d21f1..a1161ae 100644
--- a/spec/family_tree_manager_spec.rb
+++ b/spec/family_tree_manager_spec.rb
@@ -4,10 +4,15 @@ require_relative '../lib/family_tree_manager'
RSpec.describe FamilyTreeManager do
let(:family_tree_manager) { FamilyTreeManager.instance }
+ let(:family_tree) { instance_double(FamilyTree) }
+
+ before do
+ family_tree_manager.instance_variable_set(:@family_tree, family_tree)
+ end
describe '#initialize' do
- it 'initialises the family_members hash' do
- expect(family_tree_manager.instance_variable_get(:@family_members)).to eq({})
+ it 'creates a family tree' do
+ expect(family_tree_manager.instance_variable_get(:@family_tree)).to eq(family_tree)
end
end
@@ -15,6 +20,11 @@ RSpec.describe FamilyTreeManager do
it 'is defined' do
expect(family_tree_manager).to respond_to(:add_child)
end
+
+ it 'calls add_child on the family tree' do
+ expect(family_tree).to receive(:add_child).with('Child', 'Mother', 'Father')
+ family_tree_manager.add_child('Child', 'Mother', 'Father')
+ end
end
describe '#query_hierarchy' do
diff --git a/spec/family_tree_spec.rb b/spec/family_tree_spec.rb
new file mode 100644
index 0000000..2059a89
--- /dev/null
+++ b/spec/family_tree_spec.rb
@@ -0,0 +1,40 @@
+# frozen_string_literal: true
+
+require_relative '../lib/family_tree'
+
+RSpec.describe FamilyTree do
+ describe '#initialize' do
+ it 'creates an empty array' do
+ family_tree = FamilyTree.new
+ expect(family_tree.instance_variable_get(:@people)).to eq([])
+ end
+ end
+
+ describe '#add_child' do
+ it 'is defined' do
+ family_tree = FamilyTree.new
+ expect(family_tree).to respond_to(:add_child)
+ end
+
+ it 'prints the params' do
+ family_tree = FamilyTree.new
+ expect do
+ family_tree.add_child('Child', 'Mother', 'Father')
+ end.to output("Adding Child with params: Child, Mother, Father\n").to_stdout
+ end
+ end
+
+ describe '#query_hierarchy' do
+ it 'is defined' do
+ family_tree = FamilyTree.new
+ expect(family_tree).to respond_to(:query_hierarchy)
+ end
+
+ it 'prints the params' do
+ family_tree = FamilyTree.new
+ expect do
+ family_tree.query_hierarchy('Child')
+ end.to output("Querying Hierarcy with params: Child\n").to_stdout
+ end
+ end
+end