From 0892ef99ce080198fa73d512fbc006c072da8fb2 Mon Sep 17 00:00:00 2001 From: Zion Mekonnen Date: Tue, 7 Jan 2025 10:57:02 -0800 Subject: [PATCH 1/2] verbose-spork IC --- lib/candidate.rb | 10 ++++++++++ lib/election.rb | 14 ++++++++++++++ lib/race.rb | 12 ++++++++++++ spec/candidate_spec.rb | 25 +++++++++++++++++++++++++ spec/election_spec.rb | 35 +++++++++++++++++++++++++++++++++++ spec/race_spec.rb | 32 ++++++++++++++++++++++++++++++++ 6 files changed, 128 insertions(+) create mode 100644 spec/candidate_spec.rb create mode 100644 spec/election_spec.rb create mode 100644 spec/race_spec.rb diff --git a/lib/candidate.rb b/lib/candidate.rb index a847ba9..40b9358 100644 --- a/lib/candidate.rb +++ b/lib/candidate.rb @@ -1,2 +1,12 @@ class Candidate + attr_reader :name, :party, :votes + def initialize(info) + @name = info[:name] + @party = info[:party] + @votes = 0 + end + + def vote_for + @votes += 1 + end end diff --git a/lib/election.rb b/lib/election.rb index c756dc9..ab4dab1 100644 --- a/lib/election.rb +++ b/lib/election.rb @@ -1,2 +1,16 @@ class Election + attr_reader :year, :races + def initialize(year) + @year = year + @races = [] + end + def add_race(race) + @races << race + end + + def candidates + @races.flat_map do |race| + race.candidates + end + end end diff --git a/lib/race.rb b/lib/race.rb index b2843fa..f356bda 100644 --- a/lib/race.rb +++ b/lib/race.rb @@ -1,2 +1,14 @@ class Race + attr_reader :position_in_office, :candidates + + def initialize(position_in_office) + @position_in_office = position_in_office + @candidates = [] + end + + def register_candidate(candidate_info) + candidate = Candidate.new(candidate_info) + @candidates << candidate + candidate + end end diff --git a/spec/candidate_spec.rb b/spec/candidate_spec.rb new file mode 100644 index 0000000..53b93f7 --- /dev/null +++ b/spec/candidate_spec.rb @@ -0,0 +1,25 @@ +require './lib/candidate' +require 'rspec' + +RSpec.describe Candidate do + before (:each) do + @diana = Candidate.new({name: "Diana D", party: :democrat}) + end + + it 'returns candidates name and party' do + expect(@diana.name).to eq("Diana D") + expect(@diana.party).to eq(:democrat) + end + + it 'can calculate the number of votes' do + expect(@diana.votes).to eq(0) + + @diana.vote_for + @diana.vote_for + @diana.vote_for + expect(@diana.votes).to eq(3) + + @diana.vote_for + expect(@diana.votes).to eq(4) + end +end diff --git a/spec/election_spec.rb b/spec/election_spec.rb new file mode 100644 index 0000000..21eb561 --- /dev/null +++ b/spec/election_spec.rb @@ -0,0 +1,35 @@ +require './lib/candidate' +require './lib/race' +require './lib/election' +require 'rspec' + +RSpec.describe Race do + before (:each) do + @diana = Candidate.new({name: "Diana D", party: :democrat}) + @roberto = Candidate.new({ name: "Roberto R", party: :republican }) + @race = Race.new("Texas Governor") + @race.register_candidate({ name: "Diana D", party: :democrat }) + @race.register_candidate({ name: "Roberto R", party: :republican }) + @election = Election.new("2025") + end + + it 'initializes' do + expect(@election.year).to eq("2025") + expect(@election.races).to eq([]) + end + + it 'adds races to the election' do + @election.add_race(@race) + expect(@election.races).to include(@race) + end + + it "can list the candidates in the election" do + @election.add_race(@race) + + candidate_names = @election.candidates.map do |candidate| + candidate.name + end + expect(candidate_names).to include("Diana D", "Roberto R") + end + +end \ No newline at end of file diff --git a/spec/race_spec.rb b/spec/race_spec.rb new file mode 100644 index 0000000..98a2d65 --- /dev/null +++ b/spec/race_spec.rb @@ -0,0 +1,32 @@ +require './lib/candidate' +require './lib/race' +require 'rspec' + +RSpec.describe Race do + before (:each) do + @diana = Candidate.new({name: "Diana D", party: :democrat}) + @race = Race.new("Texas Governor") + end + + it 'returns candidate position' do + expect(@race.position_in_office).to eq("Texas Governor") + + end + + it 'returns [] for candidates' do + expect(@race.candidates).to eq([]) + end + + it 'returns the candidates info and that they are in the race, once they have been registered' do + candidate1 = @race.register_candidate({name: "Diana D", party: :democrat}) + expect(candidate1.class).to be(Candidate) + expect(candidate1.name).to eq("Diana D") + expect(candidate1.party).to eq(:democrat) + + candidate2 = @race.register_candidate({name: "Roberto R", party: :republican}) + expect(@race.candidates).to include(candidate1, candidate2) + + end + + +end \ No newline at end of file From a235f6a4366890afa2c2ca6a8b6fbaca76345e13 Mon Sep 17 00:00:00 2001 From: Zion Mekonnen Date: Tue, 7 Jan 2025 10:59:14 -0800 Subject: [PATCH 2/2] fixed mistake in election spec --- spec/election_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/election_spec.rb b/spec/election_spec.rb index 21eb561..cc18a9d 100644 --- a/spec/election_spec.rb +++ b/spec/election_spec.rb @@ -3,7 +3,7 @@ require './lib/election' require 'rspec' -RSpec.describe Race do +RSpec.describe Election do before (:each) do @diana = Candidate.new({name: "Diana D", party: :democrat}) @roberto = Candidate.new({ name: "Roberto R", party: :republican })