swamp 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +30 -14
- data/bin/swamp +7 -3
- data/features/specifications/scope_changing.feature +34 -0
- data/features/specifications/user_scans_buttons_in_a_page.feature +3 -3
- data/features/specifications/user_scans_fields_in_a_page.feature +3 -3
- data/features/specifications/user_scans_input_buttons_in_a_page.feature +2 -2
- data/features/specifications/user_scans_links_in_a_page.feature +1 -1
- data/features/specifications/user_scans_select_box_elements_in_a_page.feature +3 -3
- data/features/step_definitions/swamp_steps.rb +19 -8
- data/features/support/setup.rb +9 -4
- data/lib/swamp.rb +2 -0
- data/lib/swamp/assertions.rb +7 -0
- data/lib/swamp/builder.rb +10 -6
- data/lib/swamp/interface.rb +8 -2
- data/lib/swamp/setup.rb +49 -0
- data/lib/swamp/version.rb +1 -1
- data/lib/swamp/wrapper.rb +5 -4
- data/spec/spec_helper.rb +1 -1
- data/spec/swamp/builder_spec.rb +18 -8
- data/spec/swamp/buttons_spec.rb +37 -37
- data/spec/swamp/evaluator_spec.rb +10 -10
- data/spec/swamp/fields_spec.rb +36 -36
- data/spec/swamp/formatter_spec.rb +7 -7
- data/spec/swamp/input_buttons_spec.rb +24 -24
- data/spec/swamp/interface_spec.rb +31 -15
- data/spec/swamp/links_spec.rb +12 -12
- data/spec/swamp/select_boxes_spec.rb +30 -30
- data/spec/swamp/setup_spec.rb +41 -0
- data/spec/swamp/wrapper_spec.rb +28 -26
- metadata +32 -26
| @@ -7,42 +7,42 @@ module Swamp | |
| 7 7 | 
             
                  context "when the name has dashes" do
         | 
| 8 8 | 
             
                    it "replaces the dashes with unsderscores" do
         | 
| 9 9 | 
             
                      name = "user-name"
         | 
| 10 | 
            -
                      formatter.format(name). | 
| 10 | 
            +
                      expect(formatter.format(name)).to eq("user_name")
         | 
| 11 11 | 
             
                    end
         | 
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 14 | 
             
                  context "when the name has white spaces" do
         | 
| 15 15 | 
             
                    it "replaces the white spaces with underscores" do
         | 
| 16 16 | 
             
                      name = "user name"
         | 
| 17 | 
            -
                      formatter.format(name). | 
| 17 | 
            +
                      expect(formatter.format(name)).to eq("user_name")
         | 
| 18 18 | 
             
                    end
         | 
| 19 19 | 
             
                  end
         | 
| 20 20 |  | 
| 21 21 | 
             
                  context "when the name has underscore in the end" do
         | 
| 22 22 | 
             
                    it "removes the underscores from the end" do
         | 
| 23 23 | 
             
                      name = "user_name_"
         | 
| 24 | 
            -
                      formatter.format(name). | 
| 24 | 
            +
                      expect(formatter.format(name)).to eq("user_name")
         | 
| 25 25 | 
             
                    end
         | 
| 26 26 | 
             
                  end
         | 
| 27 27 |  | 
| 28 28 | 
             
                  context "when the name has uppercase characters" do
         | 
| 29 29 | 
             
                    it "converts the characters to lowercase" do
         | 
| 30 30 | 
             
                      name = "Sign up"
         | 
| 31 | 
            -
                      formatter.format(name). | 
| 31 | 
            +
                      expect(formatter.format(name)).to eq("sign_up")
         | 
| 32 32 | 
             
                    end
         | 
| 33 33 | 
             
                  end
         | 
| 34 34 |  | 
| 35 35 | 
             
                  context "when the name has parentheses" do
         | 
| 36 36 | 
             
                    it "replace the parentheses with underscores" do
         | 
| 37 37 | 
             
                      name = "user_name(title)"
         | 
| 38 | 
            -
                      formatter.format(name). | 
| 38 | 
            +
                      expect(formatter.format(name)).to eq("user_name_title")
         | 
| 39 39 | 
             
                    end
         | 
| 40 40 | 
             
                  end
         | 
| 41 41 |  | 
| 42 42 | 
             
                  context "when the name has brackets" do
         | 
| 43 43 | 
             
                    it "replace the brackets with underscores" do
         | 
| 44 44 | 
             
                      name = "user_name[title]"
         | 
| 45 | 
            -
                      formatter.format(name). | 
| 45 | 
            +
                      expect(formatter.format(name)).to eq("user_name_title")
         | 
| 46 46 | 
             
                    end
         | 
| 47 47 | 
             
                  end
         | 
| 48 48 | 
             
                end
         | 
| @@ -51,7 +51,7 @@ module Swamp | |
| 51 51 | 
             
                  context "when the class has white spaces" do
         | 
| 52 52 | 
             
                    it "replaces the white spaces with dots" do
         | 
| 53 53 | 
             
                      class_name = "button g-button g-button-submit"
         | 
| 54 | 
            -
                      formatter.format_class(class_name). | 
| 54 | 
            +
                      expect(formatter.format_class(class_name)).to eq("button.g-button.g-button-submit")
         | 
| 55 55 | 
             
                    end
         | 
| 56 56 | 
             
                  end
         | 
| 57 57 | 
             
                end
         | 
| @@ -5,9 +5,9 @@ module Swamp | |
| 5 5 |  | 
| 6 6 | 
             
                it "delegates to capybara the responsibility to get the submit elements" do
         | 
| 7 7 | 
             
                  element = {'value' => "Log In", 'id' => "u_0_b"}
         | 
| 8 | 
            -
                  element. | 
| 9 | 
            -
                  input_buttons.page. | 
| 10 | 
            -
                  input_buttons.page. | 
| 8 | 
            +
                  allow(element).to receive(:visible?).and_return(true)
         | 
| 9 | 
            +
                  allow(input_buttons.page).to receive(:execute_script).and_return(nil)
         | 
| 10 | 
            +
                  expect(input_buttons.page).to receive(:all).with('input[type="submit"]').and_return([element])
         | 
| 11 11 | 
             
                  input_buttons.get
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| @@ -16,25 +16,25 @@ module Swamp | |
| 16 16 | 
             
                    let(:element) { {'value' => "Log In", 'id' => "u_0_b"} }
         | 
| 17 17 |  | 
| 18 18 | 
             
                    before(:each) do
         | 
| 19 | 
            -
                      element. | 
| 20 | 
            -
                      input_buttons.page. | 
| 19 | 
            +
                      allow(element).to receive(:visible?).and_return(true)
         | 
| 20 | 
            +
                      allow(input_buttons.page).to receive(:all).with('input[type="submit"]').and_return([element])
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 |  | 
| 23 23 | 
             
                    it "highlights the element" do
         | 
| 24 | 
            -
                      input_buttons.page. | 
| 24 | 
            +
                      expect(input_buttons.page).to receive(:execute_script).twice
         | 
| 25 25 | 
             
                      input_buttons.get
         | 
| 26 26 | 
             
                    end
         | 
| 27 27 |  | 
| 28 28 | 
             
                    it "returns the element in the array using the value as the name" do
         | 
| 29 | 
            -
                      input_buttons.page. | 
| 30 | 
            -
                      input_buttons.get. | 
| 31 | 
            -
                      input_buttons.get.first.name. | 
| 29 | 
            +
                      allow(input_buttons.page).to receive(:execute_script).and_return(nil)
         | 
| 30 | 
            +
                      expect(input_buttons.get.size).to eq(1)
         | 
| 31 | 
            +
                      expect(input_buttons.get.first.name).to eq("Log In")
         | 
| 32 32 | 
             
                    end
         | 
| 33 33 |  | 
| 34 34 | 
             
                    it "returns the element in the array using the id as the selector" do
         | 
| 35 | 
            -
                      input_buttons.page. | 
| 36 | 
            -
                      input_buttons.get. | 
| 37 | 
            -
                      input_buttons.get.first.selector. | 
| 35 | 
            +
                      allow(input_buttons.page).to receive(:execute_script).and_return(nil)
         | 
| 36 | 
            +
                      expect(input_buttons.get.size).to eq(1)
         | 
| 37 | 
            +
                      expect(input_buttons.get.first.selector).to eq("#u_0_b")
         | 
| 38 38 | 
             
                    end
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 |  | 
| @@ -42,25 +42,25 @@ module Swamp | |
| 42 42 | 
             
                    let(:element) { {'value' => "Log In", 'class' => "btn without id"} }
         | 
| 43 43 |  | 
| 44 44 | 
             
                    before(:each) do
         | 
| 45 | 
            -
                      element. | 
| 46 | 
            -
                      input_buttons.page. | 
| 45 | 
            +
                      allow(element).to receive(:visible?).and_return(true)
         | 
| 46 | 
            +
                      allow(input_buttons.page).to receive(:all).with('input[type="submit"]').and_return([element])
         | 
| 47 47 | 
             
                    end
         | 
| 48 48 |  | 
| 49 49 | 
             
                    it "highlights the element" do
         | 
| 50 | 
            -
                      input_buttons.page. | 
| 50 | 
            +
                      expect(input_buttons.page).to receive(:execute_script).twice
         | 
| 51 51 | 
             
                      input_buttons.get
         | 
| 52 52 | 
             
                    end
         | 
| 53 53 |  | 
| 54 54 | 
             
                    it "returns the element in the array using the value as the name" do
         | 
| 55 | 
            -
                      input_buttons.page. | 
| 56 | 
            -
                      input_buttons.get. | 
| 57 | 
            -
                      input_buttons.get.first.name. | 
| 55 | 
            +
                      allow(input_buttons.page).to receive(:execute_script).and_return(nil)
         | 
| 56 | 
            +
                      expect(input_buttons.get.size).to eq(1)
         | 
| 57 | 
            +
                      expect(input_buttons.get.first.name).to eq("Log In")
         | 
| 58 58 | 
             
                    end
         | 
| 59 59 |  | 
| 60 60 | 
             
                    it "returns the element in the array using the class concatenated with the value as the selector" do
         | 
| 61 | 
            -
                      input_buttons.page. | 
| 62 | 
            -
                      input_buttons.get. | 
| 63 | 
            -
                      input_buttons.get.first.selector. | 
| 61 | 
            +
                      allow(input_buttons.page).to receive(:execute_script).and_return(nil)
         | 
| 62 | 
            +
                      expect(input_buttons.get.size).to eq(1)
         | 
| 63 | 
            +
                      expect(input_buttons.get.first.selector).to eq("input.btn.without.id[value='Log In']")
         | 
| 64 64 | 
             
                    end
         | 
| 65 65 | 
             
                  end
         | 
| 66 66 | 
             
                end
         | 
| @@ -68,9 +68,9 @@ module Swamp | |
| 68 68 | 
             
                context "when the element is not visible" do
         | 
| 69 69 | 
             
                  it "returns an empty array" do
         | 
| 70 70 | 
             
                    element = {'value' => "Log In", 'id' => "u_0_b"}
         | 
| 71 | 
            -
                    element. | 
| 72 | 
            -
                    input_buttons.page. | 
| 73 | 
            -
                    input_buttons.get. | 
| 71 | 
            +
                    allow(element).to receive(:visible?).and_return(false)
         | 
| 72 | 
            +
                    allow(input_buttons.page).to receive(:all).with('input[type="submit"]').and_return([element])
         | 
| 73 | 
            +
                    expect(input_buttons.get).to eq([])
         | 
| 74 74 | 
             
                  end
         | 
| 75 75 | 
             
                end
         | 
| 76 76 | 
             
              end
         | 
| @@ -3,44 +3,60 @@ module Swamp | |
| 3 3 | 
             
              describe Interface do
         | 
| 4 4 | 
             
                let(:output) { output = double('output').as_null_object }
         | 
| 5 5 | 
             
                let(:wrapper) { wrapper = double('wrapper').as_null_object }
         | 
| 6 | 
            -
                let(: | 
| 6 | 
            +
                let(:setup) { setup = Swamp::Setup.new }
         | 
| 7 | 
            +
                let(:interface) { interface = Swamp::Interface.new(output, wrapper, setup) }
         | 
| 7 8 |  | 
| 8 9 | 
             
                describe "#run" do
         | 
| 9 10 | 
             
                  it "prompts for the url" do
         | 
| 10 | 
            -
                    output. | 
| 11 | 
            +
                    expect(output).to receive(:puts).with("Enter the url for the page to be scanned:")
         | 
| 11 12 | 
             
                    interface.run
         | 
| 12 13 | 
             
                  end
         | 
| 13 14 | 
             
                end
         | 
| 14 15 |  | 
| 16 | 
            +
                describe "#setup_command" do
         | 
| 17 | 
            +
                  let(:command) { ":scope = source" }
         | 
| 18 | 
            +
                  it "delegates the responsibility to execute the command to the Setup class" do
         | 
| 19 | 
            +
                    expect(setup).to receive(:handle_command).with(command).and_return(["something"])
         | 
| 20 | 
            +
                    interface.setup_command(command)
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  context "when it receives a valid command" do
         | 
| 24 | 
            +
                    it "sends a message to the output telling that the command was successful" do
         | 
| 25 | 
            +
                      expect(output).to receive(:puts).with("Option :scope set to source")
         | 
| 26 | 
            +
                      interface.setup_command(command)
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 15 31 | 
             
                describe "#scan" do
         | 
| 16 32 | 
             
                  it "warns the user that it is scanning" do
         | 
| 17 | 
            -
                    output. | 
| 33 | 
            +
                    expect(output).to receive(:puts).with("Scanning, please wait...")
         | 
| 18 34 | 
             
                    interface.scan("http://www.fakepage.com")
         | 
| 19 35 | 
             
                  end
         | 
| 20 36 |  | 
| 21 37 | 
             
                  it "delegates the responsibility to fire up the browser to the wrapper class" do
         | 
| 22 | 
            -
                    wrapper. | 
| 38 | 
            +
                    expect(wrapper).to receive(:explore)
         | 
| 23 39 | 
             
                    interface.scan("http://www.fakepage.com")
         | 
| 24 40 | 
             
                  end
         | 
| 25 41 |  | 
| 26 42 | 
             
                  it "delegates the page parsing to the wrapper class" do
         | 
| 27 | 
            -
                    wrapper. | 
| 43 | 
            +
                    expect(wrapper).to receive(:scan).and_return(["code_snippet"])
         | 
| 28 44 | 
             
                    interface.scan("http://www.fakepage.com")
         | 
| 29 45 | 
             
                  end
         | 
| 30 46 |  | 
| 31 47 | 
             
                  context "when it scans a valid url" do
         | 
| 32 48 | 
             
                    context "when elements were found" do
         | 
| 33 49 | 
             
                      it "sends the code snippets of the scanned page to the output" do
         | 
| 34 | 
            -
                        wrapper. | 
| 35 | 
            -
                        output. | 
| 50 | 
            +
                        allow(wrapper).to receive(:scan).and_return(["code_snippet"])
         | 
| 51 | 
            +
                        expect(output).to receive(:puts).with("code_snippet")
         | 
| 36 52 | 
             
                        interface.scan("http://www.fakepage.com")
         | 
| 37 53 | 
             
                      end
         | 
| 38 54 | 
             
                    end
         | 
| 39 55 |  | 
| 40 56 | 
             
                    context "when no elements were found" do
         | 
| 41 57 | 
             
                      it "sends a warning message to the output telling that no elements were found" do
         | 
| 42 | 
            -
                        wrapper. | 
| 43 | 
            -
                        output. | 
| 58 | 
            +
                        allow(wrapper).to receive(:scan).and_return([])
         | 
| 59 | 
            +
                        expect(output).to receive(:puts).with("No elements were detected")
         | 
| 44 60 | 
             
                        interface.scan("http://www.fakepage.com")
         | 
| 45 61 | 
             
                      end
         | 
| 46 62 | 
             
                    end
         | 
| @@ -48,7 +64,7 @@ module Swamp | |
| 48 64 |  | 
| 49 65 | 
             
                  context "when it scans an invalid url" do
         | 
| 50 66 | 
             
                    it "sends a warning message to the output" do
         | 
| 51 | 
            -
                      output. | 
| 67 | 
            +
                      expect(output).to receive(:puts).with("Please enter a valid url!")
         | 
| 52 68 | 
             
                      interface.scan("abc123")
         | 
| 53 69 | 
             
                    end
         | 
| 54 70 | 
             
                  end
         | 
| @@ -56,17 +72,17 @@ module Swamp | |
| 56 72 | 
             
                  context "when it receives an enter keystroke" do
         | 
| 57 73 | 
             
                    context "when no page was scanned yet" do
         | 
| 58 74 | 
             
                      it "sends a warning message to the output" do
         | 
| 59 | 
            -
                        wrapper. | 
| 60 | 
            -
                        output. | 
| 75 | 
            +
                        allow(wrapper).to receive(:page_visited).and_return(false)
         | 
| 76 | 
            +
                        expect(output).to receive(:puts).with("Please enter a valid url!")
         | 
| 61 77 | 
             
                        interface.scan("\n")
         | 
| 62 78 | 
             
                      end
         | 
| 63 79 | 
             
                    end
         | 
| 64 80 |  | 
| 65 81 | 
             
                    context "when a page was already scanned" do
         | 
| 66 82 | 
             
                      it "scans the current page and sends the code snippets to the output" do
         | 
| 67 | 
            -
                        wrapper. | 
| 68 | 
            -
                        wrapper. | 
| 69 | 
            -
                        output. | 
| 83 | 
            +
                        allow(wrapper).to receive(:page_visited).and_return(true)
         | 
| 84 | 
            +
                        allow(wrapper).to receive(:scan).and_return(["code_snippet"])
         | 
| 85 | 
            +
                        expect(output).to receive(:puts).with("code_snippet")
         | 
| 70 86 | 
             
                        interface.scan("\n")
         | 
| 71 87 | 
             
                      end
         | 
| 72 88 | 
             
                    end
         | 
    
        data/spec/swamp/links_spec.rb
    CHANGED
    
    | @@ -5,9 +5,9 @@ module Swamp | |
| 5 5 |  | 
| 6 6 | 
             
                it "delegates to capybara the responsibility to get the links" do
         | 
| 7 7 | 
             
                  element = {'id' => "forgot-password", 'href' => "https://somewhere.com"}
         | 
| 8 | 
            -
                  element. | 
| 9 | 
            -
                  links.page. | 
| 10 | 
            -
                  links.page. | 
| 8 | 
            +
                  allow(element).to receive(:visible?).and_return(true)
         | 
| 9 | 
            +
                  allow(links.page).to receive(:execute_script).and_return(nil)
         | 
| 10 | 
            +
                  expect(links.page).to receive(:all).with('a[href][id]').and_return([element])
         | 
| 11 11 | 
             
                  links.get
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| @@ -16,25 +16,25 @@ module Swamp | |
| 16 16 | 
             
                    let(:element) { {'id' => "forgot-password", 'href' => "https://somewhere.com"} }
         | 
| 17 17 |  | 
| 18 18 | 
             
                    before(:each) do
         | 
| 19 | 
            -
                      element. | 
| 20 | 
            -
                      links.page. | 
| 19 | 
            +
                      allow(element).to receive(:visible?).and_return(true)
         | 
| 20 | 
            +
                      allow(links.page).to receive(:all).with('a[href][id]').and_return([element])
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 |  | 
| 23 23 | 
             
                    it "highlights the element" do
         | 
| 24 | 
            -
                      links.page. | 
| 24 | 
            +
                      expect(links.page).to receive(:execute_script).and_return(nil)
         | 
| 25 25 | 
             
                      links.get
         | 
| 26 26 | 
             
                    end
         | 
| 27 27 |  | 
| 28 28 | 
             
                    it "returns the element in the array using the id as the name" do
         | 
| 29 | 
            -
                      links.page. | 
| 30 | 
            -
                      links.get. | 
| 31 | 
            -
                      links.get.first.name. | 
| 29 | 
            +
                      allow(links.page).to receive(:execute_script).and_return(nil)
         | 
| 30 | 
            +
                      expect(links.get.size).to eq(1)
         | 
| 31 | 
            +
                      expect(links.get.first.name).to eq("forgot-password")
         | 
| 32 32 | 
             
                    end
         | 
| 33 33 |  | 
| 34 34 | 
             
                    it "returns the element in the array using the id as the selector" do
         | 
| 35 | 
            -
                      links.page. | 
| 36 | 
            -
                      links.get. | 
| 37 | 
            -
                      links.get.first.selector. | 
| 35 | 
            +
                      allow(links.page).to receive(:execute_script).and_return(nil)
         | 
| 36 | 
            +
                      expect(links.get.size).to eq(1)
         | 
| 37 | 
            +
                      expect(links.get.first.selector).to eq("forgot-password")
         | 
| 38 38 | 
             
                    end
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 | 
             
                end
         | 
| @@ -5,9 +5,9 @@ module Swamp | |
| 5 5 |  | 
| 6 6 | 
             
                it "delegates to capybara the responsibility to get the select box elements" do
         | 
| 7 7 | 
             
                  element = {'id' => "month", 'name' => "birthday_month"}
         | 
| 8 | 
            -
                  element. | 
| 9 | 
            -
                  select_boxes.page. | 
| 10 | 
            -
                  select_boxes.page. | 
| 8 | 
            +
                  allow(element).to receive(:visible?).and_return(true)
         | 
| 9 | 
            +
                  allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 10 | 
            +
                  expect(select_boxes.page).to receive(:all).with('select').and_return([element])
         | 
| 11 11 | 
             
                  select_boxes.get
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| @@ -16,25 +16,25 @@ module Swamp | |
| 16 16 | 
             
                    let(:element) { {'id' => "month", 'name' => "birthday_month"} }
         | 
| 17 17 |  | 
| 18 18 | 
             
                    before(:each) do
         | 
| 19 | 
            -
                      element. | 
| 20 | 
            -
                      select_boxes.page. | 
| 19 | 
            +
                      allow(element).to receive(:visible?).and_return(true)
         | 
| 20 | 
            +
                      allow(select_boxes.page).to receive(:all).with('select').and_return([element])
         | 
| 21 21 | 
             
                    end
         | 
| 22 22 |  | 
| 23 23 | 
             
                    it "highlights the element" do
         | 
| 24 | 
            -
                      select_boxes.page. | 
| 24 | 
            +
                      expect(select_boxes.page).to receive(:execute_script).twice
         | 
| 25 25 | 
             
                      select_boxes.get
         | 
| 26 26 | 
             
                    end
         | 
| 27 27 |  | 
| 28 28 | 
             
                    it "returns the element in the array using the id as the name" do
         | 
| 29 | 
            -
                      select_boxes.page. | 
| 30 | 
            -
                      select_boxes.get. | 
| 31 | 
            -
                      select_boxes.get.first.name. | 
| 29 | 
            +
                      allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 30 | 
            +
                      expect(select_boxes.get.size).to eq(1)
         | 
| 31 | 
            +
                      expect(select_boxes.get.first.name).to eq("month")
         | 
| 32 32 | 
             
                    end
         | 
| 33 33 |  | 
| 34 34 | 
             
                    it "returns the element in the array using the id as the selector" do
         | 
| 35 | 
            -
                      select_boxes.page. | 
| 36 | 
            -
                      select_boxes.get. | 
| 37 | 
            -
                      select_boxes.get.first.selector. | 
| 35 | 
            +
                      allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 36 | 
            +
                      expect(select_boxes.get.size).to eq(1)
         | 
| 37 | 
            +
                      expect(select_boxes.get.first.selector).to eq("month")
         | 
| 38 38 | 
             
                    end
         | 
| 39 39 | 
             
                  end
         | 
| 40 40 |  | 
| @@ -42,25 +42,25 @@ module Swamp | |
| 42 42 | 
             
                    let(:element) { {'name' => "birthday_month"} }
         | 
| 43 43 |  | 
| 44 44 | 
             
                    before(:each) do
         | 
| 45 | 
            -
                      element. | 
| 46 | 
            -
                      select_boxes.page. | 
| 45 | 
            +
                      allow(element).to receive(:visible?).and_return(true)
         | 
| 46 | 
            +
                      allow(select_boxes.page).to receive(:all).with('select').and_return([element])
         | 
| 47 47 | 
             
                    end
         | 
| 48 48 |  | 
| 49 49 | 
             
                    it "highlights the element" do
         | 
| 50 | 
            -
                      select_boxes.page. | 
| 50 | 
            +
                      expect(select_boxes.page).to receive(:execute_script).twice
         | 
| 51 51 | 
             
                      select_boxes.get
         | 
| 52 52 | 
             
                    end
         | 
| 53 53 |  | 
| 54 54 | 
             
                    it "returns the element in the array using the name as the name" do
         | 
| 55 | 
            -
                      select_boxes.page. | 
| 56 | 
            -
                      select_boxes.get. | 
| 57 | 
            -
                      select_boxes.get.first.name. | 
| 55 | 
            +
                      allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 56 | 
            +
                      expect(select_boxes.get.size).to eq(1)
         | 
| 57 | 
            +
                      expect(select_boxes.get.first.name).to eq("birthday_month")
         | 
| 58 58 | 
             
                    end
         | 
| 59 59 |  | 
| 60 60 | 
             
                    it "returns the element in the array using the name as the selector" do
         | 
| 61 | 
            -
                      select_boxes.page. | 
| 62 | 
            -
                      select_boxes.get. | 
| 63 | 
            -
                      select_boxes.get.first.selector. | 
| 61 | 
            +
                      allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 62 | 
            +
                      expect(select_boxes.get.size).to eq(1)
         | 
| 63 | 
            +
                      expect(select_boxes.get.first.selector).to eq("birthday_month")
         | 
| 64 64 | 
             
                    end
         | 
| 65 65 | 
             
                  end
         | 
| 66 66 |  | 
| @@ -68,25 +68,25 @@ module Swamp | |
| 68 68 | 
             
                    let(:element) { {'class' => "provider-select"} }
         | 
| 69 69 |  | 
| 70 70 | 
             
                    before(:each) do
         | 
| 71 | 
            -
                      element. | 
| 72 | 
            -
                      select_boxes.page. | 
| 71 | 
            +
                      allow(element).to receive(:visible?).and_return(true)
         | 
| 72 | 
            +
                      allow(select_boxes.page).to receive(:all).with('select').and_return([element])
         | 
| 73 73 | 
             
                    end
         | 
| 74 74 |  | 
| 75 75 | 
             
                    it "highlights the element" do
         | 
| 76 | 
            -
                      select_boxes.page. | 
| 76 | 
            +
                      expect(select_boxes.page).to receive(:execute_script).twice
         | 
| 77 77 | 
             
                      select_boxes.get
         | 
| 78 78 | 
             
                    end
         | 
| 79 79 |  | 
| 80 80 | 
             
                    it "returns the element in the array using the class as the name" do
         | 
| 81 | 
            -
                      select_boxes.page. | 
| 82 | 
            -
                      select_boxes.get. | 
| 83 | 
            -
                      select_boxes.get.first.name. | 
| 81 | 
            +
                      allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 82 | 
            +
                      expect(select_boxes.get.size).to eq(1)
         | 
| 83 | 
            +
                      expect(select_boxes.get.first.name).to eq("provider-select")
         | 
| 84 84 | 
             
                    end
         | 
| 85 85 |  | 
| 86 86 | 
             
                    it "returns the element in the array using the class as the selector" do
         | 
| 87 | 
            -
                      select_boxes.page. | 
| 88 | 
            -
                      select_boxes.get. | 
| 89 | 
            -
                      select_boxes.get.first.selector. | 
| 87 | 
            +
                      allow(select_boxes.page).to receive(:execute_script).and_return(nil)
         | 
| 88 | 
            +
                      expect(select_boxes.get.size).to eq(1)
         | 
| 89 | 
            +
                      expect(select_boxes.get.first.selector).to eq("provider-select")
         | 
| 90 90 | 
             
                    end
         | 
| 91 91 | 
             
                  end
         | 
| 92 92 | 
             
                end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
            module Swamp
         | 
| 3 | 
            +
              describe Setup do
         | 
| 4 | 
            +
                let(:setup) { Swamp::Setup.new }
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                it "should set the default options" do
         | 
| 7 | 
            +
                  expect(setup.scope).to eq("page")
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                describe "#handle_command" do
         | 
| 11 | 
            +
                  context "when the command is valid" do
         | 
| 12 | 
            +
                    context "when the scope changes" do
         | 
| 13 | 
            +
                      it "should set the option :scope to source" do
         | 
| 14 | 
            +
                        setup.handle_command(":scope = source")
         | 
| 15 | 
            +
                        expect(setup.scope).to eq("source")
         | 
| 16 | 
            +
                      end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                      it "should return a message confirming the scope was set to source" do
         | 
| 19 | 
            +
                        expect(setup.handle_command(":scope = source")).to eq(["Option :scope set to source"])
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                      it "should set the option :scope to page" do
         | 
| 23 | 
            +
                        setup.handle_command(":scope = page")
         | 
| 24 | 
            +
                        expect(setup.scope).to eq("page")
         | 
| 25 | 
            +
                      end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                      it "should return a message confirming the scope was set to page" do
         | 
| 28 | 
            +
                        expect(setup.handle_command(":scope = page")).to eq(["Option :scope set to page"])
         | 
| 29 | 
            +
                      end
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  context "when the command is invalid" do
         | 
| 34 | 
            +
                    it "should return a message warning that the command is invalid" do
         | 
| 35 | 
            +
                      expect(setup.handle_command(":scope = ")).to eq(["Invalid command"])
         | 
| 36 | 
            +
                    end
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         |