require 'spec_helper'

describe Gitlab::Client do
  describe "notes" do
    context "when wall notes" do
      before do
        stub_get("/projects/3/notes", "notes")
        @notes = Gitlab.notes(3)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/notes")).to have_been_made
      end

      it "should return a paginated response of notes" do
        expect(@notes).to be_a Gitlab::PaginatedResponse
        expect(@notes.first.author.name).to eq("John Smith")
      end
    end

    context "when issue notes" do
      before do
        stub_get("/projects/3/issues/7/notes", "notes")
        @notes = Gitlab.issue_notes(3, 7)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/issues/7/notes")).to have_been_made
      end

      it "should return a paginated response of notes" do
        expect(@notes).to be_a Gitlab::PaginatedResponse
        expect(@notes.first.author.name).to eq("John Smith")
      end
    end

    context "when snippet notes" do
      before do
        stub_get("/projects/3/snippets/7/notes", "notes")
        @notes = Gitlab.snippet_notes(3, 7)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/snippets/7/notes")).to have_been_made
      end

      it "should return a paginated response of notes" do
        expect(@notes).to be_a Gitlab::PaginatedResponse
        expect(@notes.first.author.name).to eq("John Smith")
      end
    end

    context "when merge_request notes" do
      before do
        stub_get("/projects/3/merge_requests/7/notes", "notes")
        @notes = Gitlab.merge_request_notes(3, 7)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/merge_requests/7/notes")).to have_been_made
      end

      it "should return a paginated response of notes" do
        expect(@notes).to be_a Gitlab::PaginatedResponse
        expect(@notes.first.author.name).to eq("John Smith")
      end
    end
  end

  describe "note" do
    context "when wall note" do
      before do
        stub_get("/projects/3/notes/1201", "note")
        @note = Gitlab.note(3, 1201)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/notes/1201")).to have_been_made
      end

      it "should return information about a note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end

    context "when issue note" do
      before do
        stub_get("/projects/3/issues/7/notes/1201", "note")
        @note = Gitlab.issue_note(3, 7, 1201)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/issues/7/notes/1201")).to have_been_made
      end

      it "should return information about a note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end

    context "when snippet note" do
      before do
        stub_get("/projects/3/snippets/7/notes/1201", "note")
        @note = Gitlab.snippet_note(3, 7, 1201)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/snippets/7/notes/1201")).to have_been_made
      end

      it "should return information about a note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end

    context "when merge request note" do
      before do
        stub_get("/projects/3/merge_requests/7/notes/1201", "note")
        @note = Gitlab.merge_request_note(3, 7, 1201)
      end

      it "should get the correct resource" do
        expect(a_get("/projects/3/merge_requests/7/notes/1201")).to have_been_made
      end

      it "should return information about a note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end
  end

  describe "create note" do
    context "when wall note" do
      before do
        stub_post("/projects/3/notes", "note")
        @note = Gitlab.create_note(3, "The solution is rather tricky")
      end

      it "should get the correct resource" do
        expect(a_post("/projects/3/notes").
          with(body: { body: 'The solution is rather tricky' })).to have_been_made
      end

      it "should return information about a created note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end

    context "when issue note" do
      before do
        stub_post("/projects/3/issues/7/notes", "note")
        @note = Gitlab.create_issue_note(3, 7, "The solution is rather tricky")
      end

      it "should get the correct resource" do
        expect(a_post("/projects/3/issues/7/notes").
          with(body: { body: 'The solution is rather tricky' })).to have_been_made
      end

      it "should return information about a created note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end

    context "when snippet note" do
      before do
        stub_post("/projects/3/snippets/7/notes", "note")
        @note = Gitlab.create_snippet_note(3, 7, "The solution is rather tricky")
      end

      it "should get the correct resource" do
        expect(a_post("/projects/3/snippets/7/notes").
          with(body: { body: 'The solution is rather tricky' })).to have_been_made
      end

      it "should return information about a created note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end

    context "when merge_request note" do
      before do
        stub_post("/projects/3/merge_requests/7/notes", "note")
        @note = Gitlab.create_merge_request_note(3, 7, "The solution is rather tricky")
      end

      it "should get the correct resource" do
        expect(a_post("/projects/3/merge_requests/7/notes").
          with(body: { body: 'The solution is rather tricky' })).to have_been_made
      end

      it "should return information about a created note" do
        expect(@note.body).to eq("The solution is rather tricky")
        expect(@note.author.name).to eq("John Smith")
      end
    end
  end

  describe "delete note" do
    context "when wall note" do
      before do
        stub_delete("/projects/3/notes/1201", "note")
        @note = Gitlab.delete_note(3, 1201)
      end

      it "should get the correct resource" do
        expect(a_delete("/projects/3/notes/1201")).to have_been_made
      end

      it "should return information about a deleted note" do
        expect(@note.id).to eq(1201)
      end
    end

    context "when issue note" do
      before do
        stub_delete("/projects/3/issues/7/notes/1201", "note")
        @note = Gitlab.delete_issue_note(3, 7, 1201)
      end

      it "should get the correct resource" do
        expect(a_delete("/projects/3/issues/7/notes/1201")).to have_been_made
      end

      it "should return information about a deleted issue note" do
        expect(@note.id).to eq(1201)
      end
    end

    context "when snippet note" do
      before do
        stub_delete("/projects/3/snippets/7/notes/1201", "note")
        @note = Gitlab.delete_snippet_note(3, 7, 1201)
      end

      it "should get the correct resource" do
        expect(a_delete("/projects/3/snippets/7/notes/1201")).to have_been_made
      end

      it "should return information about a deleted snippet note" do
        expect(@note.id).to eq(1201)
      end
    end

    context "when merge request note" do
      before do
        stub_delete("/projects/3/merge_requests/7/notes/1201", "note")
        @note = Gitlab.delete_merge_request_note(3, 7, 1201)
      end

      it "should get the correct resource" do
        expect(a_delete("/projects/3/merge_requests/7/notes/1201")).to have_been_made
      end

      it "should return information about a deleted merge request note" do
        expect(@note.id).to eq(1201)
      end
    end
  end

  describe "modify note" do
    context "when wall note" do
      before do
        stub_put("/projects/3/notes/1201", "note")
        @note = Gitlab.edit_note(3, 1201, body: "edited wall note content")
      end

      it "should get the correct resource" do
        expect(a_put("/projects/3/notes/1201").
          with(body: {body: 'edited wall note content'})).to have_been_made
      end

      it "should return information about a modified note" do
        expect(@note.id).to eq(1201)
      end
    end

    context "when issue note" do
      before do
        stub_put("/projects/3/issues/7/notes/1201", "note")
        @note = Gitlab.edit_issue_note(3, 7, 1201, body: "edited issue note content")
      end

      it "should get the correct resource" do
        expect(a_put("/projects/3/issues/7/notes/1201").
          with(body: {body: 'edited issue note content'})).to have_been_made
      end

      it "should return information about a modified issue note" do
        expect(@note.id).to eq(1201)
      end
    end

    context "when snippet note" do
      before do
        stub_put("/projects/3/snippets/7/notes/1201", "note")
        @note = Gitlab.edit_snippet_note(3, 7, 1201, body: "edited snippet note content")
      end

      it "should get the correct resource" do
        expect(a_put("/projects/3/snippets/7/notes/1201").
          with(body: {body: 'edited snippet note content'})).to have_been_made
      end

      it "should return information about a modified snippet note" do
        expect(@note.id).to eq(1201)
      end
    end

    context "when merge request note" do
      before do
        stub_put("/projects/3/merge_requests/7/notes/1201", "note")
        @note = Gitlab.edit_merge_request_note(3, 7, 1201, body: "edited merge request note content")
      end

      it "should get the correct resource" do
        expect(a_put("/projects/3/merge_requests/7/notes/1201").
          with(body: {body: 'edited merge request note content'})).to have_been_made
      end

      it "should return information about a modified request note" do
        expect(@note.id).to eq(1201)
      end
    end
  end
end
