# typed: true
# frozen_string_literal: true

require "utils/github/actions"

RSpec.describe GitHub::Actions::Annotation do
  let(:message) { "lorem ipsum" }

  describe "#new" do
    it "fails when the type is wrong" do
      expect do
        described_class.new(:fatal, message, file: "file.txt")
      end.to raise_error(ArgumentError)
    end
  end

  describe "#to_s" do
    it "escapes newlines" do
      annotation = described_class.new(:warning, <<~EOS, file: "file.txt")
        lorem
        ipsum
      EOS

      expect(annotation.to_s).to eq "::warning file=file.txt::lorem%0Aipsum%0A"
    end

    it "allows specifying the file" do
      annotation = described_class.new(:warning, "lorem ipsum", file: "file.txt")

      expect(annotation.to_s).to eq "::warning file=file.txt::lorem ipsum"
    end

    it "allows specifying the title" do
      annotation = described_class.new(:warning, "lorem ipsum", file: "file.txt", title: "foo")

      expect(annotation.to_s).to eq "::warning file=file.txt,title=foo::lorem ipsum"
    end

    it "allows specifying the file and line" do
      annotation = described_class.new(:error, "lorem ipsum", file: "file.txt", line: 3)

      expect(annotation.to_s).to eq "::error file=file.txt,line=3::lorem ipsum"
    end

    it "allows specifying the file, line and column" do
      annotation = described_class.new(:error, "lorem ipsum", file: "file.txt", line: 3, column: 18)

      expect(annotation.to_s).to eq "::error file=file.txt,line=3,col=18::lorem ipsum"
    end
  end
end
