require "#{File.dirname(__FILE__)}/spec_helper" include SpecHelper describe "routes" do describe 'basic auth' do it "ohne auth" do get '/info' last_response.status.must_equal 401 end it "falsche auth" do authorize 'oh', 'ah' get '/info' last_response.status.must_equal 401 end it "korrekte auth" do authorize 'test', 'test' get '/info' last_response.status.must_equal 200 end end describe "Views ok" do it "gibt home-view 200 zurück" do get '/' last_response.status.must_equal 200 end end end describe "verlauf schüler" do before do Lehrer.create(:id => 1, :name => "Müller") Lehrer.create(:id => 2, :name => "Maier") Lehrer.create(:id => 3, :name => "Walter") end describe "schüler besucht seite zur aktiven Wahl" do before do Schueler.create(:hashid => "a", :vorname => "A", :klasse => "A1") Schueler.create(:hashid => "b", :vorname => "B", :klasse => "B1") end it "schüler gibt code auf startseite ein und wird umgeleitet" do Time.stub :now, Time.parse("Sep 21, 2016, 17:00") do post "/hashid", params={:hashid => "a"} follow_redirect! last_response.body.must_include "Hallo A," end end it "schüler stellt sich auf als schuko" do Time.stub :now, Time.parse("Sep 21, 2016, 17:00") do post "/wahl", params={:hashid => "a",:schuko => "on"} a = Schueler["a"] a.schuko.must_equal true a.sprecher.must_be_nil end end it "schüler stellt sich auf als sprecher" do Time.stub :now, Time.parse("Sep 21, 2016, 17:00") do post "/wahl", params={:hashid => "a",:sprecher => "on"} a = Schueler["a"] a.sprecher.must_equal true a.schuko.must_be_nil end end it "schüler stellt sich auf als sprecher und ändert Daten" do Time.stub :now, Time.parse("Sep 21, 2016, 17:00") do post "/wahl", params={:hashid => "a",:sprecher => "on"} post "/wahl", params={:hashid => "a",:sprecher => "", :schuko => "on", :email => "xyz"} a = Schueler["a"] a.sprecher.must_be_nil a.schuko.must_equal true a.email.must_equal "xyz" end end it "schüler stellt sich auf als sprecher und schuko" do Time.stub :now, Time.parse("Sep 21, 2016, 17:00") do post "/wahl", params={:hashid => "a", :sprecher => "on", :schuko => "on"} a = Schueler["a"] a.schuko.must_equal true a.sprecher.must_equal true end end it "schüler stellt sich auf als schuko und gibt Infos" do Time.stub :now, Time.parse("Sep 21, 2016, 17:00") do post "/wahl", params={:hashid => "a",:schuko => "on", :nachname => "AA7", :info => "Bin hier"} get "/a" last_response.body.must_include "AA7" last_response.body.must_include "Bin hier" end end end describe "schüler besucht seite zur passiven Wahl" do before do Schueler.create(:hashid => "a", :vorname => "A", :klasse => "A1", :schuko => true, :sprecher => true) Schueler.create(:hashid => "b", :vorname => "B", :klasse => "B1", :schuko => true, :sprecher => true) Schueler.create(:hashid => "c", :schuko => true) %w(d e f g h i j k l).each do |s| Schueler.create(:hashid => s, :sprecher => true) end end it "schüler gibt code auf startseite ein und wird umgeleitet" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/hashid", params={:hashid => "a"} follow_redirect! last_response.body.must_include "Hallo A," end end it "schüler will sich als schuko aufstellen nach wahlbeginn" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/wahl", params={:hashid => "d",:schuko => "on"} a = Schueler["d"] a.sprecher.must_equal true a.schuko.must_be_nil follow_redirect! last_response.body.must_include "Wahl hat bereits begonnen" end end it "schüler wählt jeweils zwei" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/a", params={:sprecher => ["a", "b"], :schuko => ["a", "b"], :lehrer => [1,2]} a = Schueler["a"] a.gewaehlt.must_equal true Sprecher.count.must_equal 2 Schuko.count.must_equal 2 Verbindungslehrer.count.must_equal 2 end end it "schüler wählt jeweils zwei und versucht es nochmal" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/a", params={:sprecher => ["a", "b"], :schuko => ["a", "b"], :lehrer => [1,2]} post "/a", params={:sprecher => ["d"]} a = Schueler["a"] a.gewaehlt.must_equal true Sprecher.count.must_equal 2 Schuko.count.must_equal 2 Verbindungslehrer.count.must_equal 2 end end it "schüler wählt drei sprecher statt zwei" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/a", params={:sprecher => ["a", "b", "d"]} a = Schueler["a"] a.gewaehlt.must_be_nil Sprecher.count.must_equal 0 end end it "schüler wählt neun schuko statt acht" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/a", params={:schuko => %w(d e f g h i j k l)} a = Schueler["a"] a.gewaehlt.must_be_nil Schuko.count.must_equal 0 end end it "schüler wählt drei lehrer statt zwei" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/a", params={:lehrer => [1,2,3]} a = Schueler["a"] a.gewaehlt.must_be_nil Verbindungslehrer.count.must_equal 0 end end it "schüler wählt nichtaufgestellten schuko" do Time.stub :now, Time.parse("Oct 1, 2016, 17:00") do post "/a", params={:schuko => %w(d)} a = Schueler["a"] a.gewaehlt.must_be_nil Schuko.count.must_equal 0 end end end describe "schüler besucht seite nach der wahl" do before do Schueler.create(:hashid => "a", :vorname => "A", :klasse => "A1", :schuko => true, :sprecher => true) Schueler.create(:hashid => "b", :vorname => "B", :klasse => "B1", :schuko => true, :sprecher => true) Schueler.create(:hashid => "c", :schuko => true) Schueler.create(:hashid => "d") end it "schüler gibt code auf startseite ein und wird umgeleitet" do Time.stub :now, Time.parse("Oct 3, 2016, 19:00") do post "/hashid", params={:hashid => "a"} follow_redirect! last_response.body.must_include "Hallo A," end end it "schüler will sich als schuko aufstellen nach wahlbeginn" do Time.stub :now, Time.parse("Oct 3, 2016, 19:00") do post "/wahl", params={:hashid => "d",:schuko => "on"} a = Schueler["d"] a.sprecher.must_be_nil a.schuko.must_be_nil end end it "schüler wählt jeweils zwei und kann es nicht mehr" do Time.stub :now, Time.parse("Oct 3, 2016, 19:00") do post "/a", params={:sprecher => ["a", "b"], :schuko => ["a", "b"], :lehrer => [1,2]} a = Schueler["a"] a.gewaehlt.must_be_nil Sprecher.count.must_equal 0 Schuko.count.must_equal 0 Verbindungslehrer.count.must_equal 0 end end end describe "nach der Wahl" do before do Schueler.create(:hashid => "a", :vorname => "A", :klasse => "A1", :schuko => true, :sprecher => true) Sprecher.create(:schueler_id => "a") Sprecher.create(:schueler_id => "a") Schueler.create(:hashid => "b", :vorname => "B", :klasse => "B1", :schuko => true, :sprecher => true) Schuko.create(:schueler_id => "b") Verbindungslehrer.create(:lehrer_id => 1) Verbindungslehrer.create(:lehrer_id => 1) end it "Korrekte Wahlergebnisse nach Auszählung" do Lehrer.first.lehrer_stimmen.count.must_equal 2 Lehrer[2].lehrer_stimmen.count.must_equal 0 a = Schueler["a"] a.sprecher_stimmen.count.must_equal 2 a.schuko_stimmen.count.must_equal 0 b = Schueler["b"] b.sprecher_stimmen.count.must_equal 0 b.schuko_stimmen.count.must_equal 1 end it "startseite wird umgeleitet auf ergebnis" do Time.stub :now, Time.parse("Oct 3, 2016, 19:00") do get "/" follow_redirect! last_response.body.must_include "Wahlbeteiligung" end end it "hashcheck erfolgreich" do Time.stub :now, Time.parse("Oct 3, 2016, 17:00") do post "/a", params={:sprecher => ["b"], :schuko => ["b"], :lehrer => [2]} stimm_hash = session[:stimm_hash] post "/hashcheck", params={:stimm_hash => stimm_hash} last_response.body.must_include "B1" last_response.body.wont_include "A1" last_response.body.must_include "Maier" last_response.body.wont_include "Müller" end end end end