From 55475178a8c0e610103e37027cc0a7a387d72f91 Mon Sep 17 00:00:00 2001 From: Szymon Szukalski Date: Thu, 24 Oct 2024 13:28:16 +1100 Subject: Define FamilyTree - Implemented basic FamilyTree which will hold all the people and perform actions on them - Updated the FamilyTree Manager to create an instance of the FamilyTree - Updated the FamilyTreeManager to call the add_child and query_hierarchy methods on the FamilyTree - Update tests --- lib/family_tree.rb | 15 +++++++++++++++ lib/family_tree_manager.rb | 8 +++++--- spec/family_tree_manager_spec.rb | 14 ++++++++++++-- spec/family_tree_spec.rb | 40 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 lib/family_tree.rb create mode 100644 spec/family_tree_spec.rb 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 -- cgit v1.2.3