spec/unit/log_spec.rb in tty-logger-0.1.0 vs spec/unit/log_spec.rb in tty-logger-0.2.0

- old
+ new

@@ -2,10 +2,24 @@ RSpec.describe TTY::Logger, "#log" do let(:output) { StringIO.new } let(:styles) { TTY::Logger::Handlers::Console::STYLES } + it "logs without a method name directly using level" do + logger = TTY::Logger.new(output: output) do |config| + config.level = :debug + end + + logger.log(:debug, "Deploying...") + + expect(output.string).to eq([ + "\e[36m#{styles[:debug][:symbol]}\e[0m ", + "\e[36mdebug\e[0m ", + "Deploying... \n" + ].join) + end + it "logs a message at debug level" do logger = TTY::Logger.new(output: output) do |config| config.level = :debug end @@ -82,22 +96,44 @@ "\e[36mwaiting\e[0m ", "Waiting for deploy \n"].join) end it "logs a message in a block" do - logger = TTY::Logger.new(output: output) do |config| - config.level = :debug - end + logger = TTY::Logger.new(output: output) logger.info { "Successfully deployed" } expect(output.string).to eq([ "\e[32m#{styles[:info][:symbol]}\e[0m ", "\e[32minfo\e[0m ", "Successfully deployed \n"].join) end + it "logs a message in a block as an array of elements" do + logger = TTY::Logger.new(output: output) + + logger.info { ["Successfully", "deployed"] } + + expect(output.string).to eq([ + "\e[32m#{styles[:info][:symbol]}\e[0m ", + "\e[32minfo\e[0m ", + "Successfully deployed \n"].join) + end + + it "logs a message in a block with metadata" do + logger = TTY::Logger.new(output: output) + + logger.info { ["Successfully", "deployed", {app: "myapp", env: "prod"}] } + + expect(output.string).to eq([ + "\e[32m#{styles[:info][:symbol]}\e[0m ", + "\e[32minfo\e[0m ", + "Successfully deployed ", + "\e[32mapp\e[0m=myapp \e[32menv\e[0m=prod\n" + ].join) + end + it "doesn't log when lower level" do logger = TTY::Logger.new(output: output) do |config| config.level = :warn end @@ -116,29 +152,52 @@ "\e[32minfo\e[0m ", "Successfully deployed ", "\e[32mapp\e[0m=myapp \e[32menv\e[0m=prod\n"].join) end - it "logs message with fields" do + it "logs message with scoped fields" do logger = TTY::Logger.new(output: output) - logger.with(app: 'myapp', env: 'prod').info("Successfully deployed") + logger.info("Successfully deployed", app: 'myapp', env: 'prod') expect(output.string).to eq([ "\e[32m#{styles[:info][:symbol]}\e[0m ", "\e[32minfo\e[0m ", "Successfully deployed ", "\e[32mapp\e[0m=myapp \e[32menv\e[0m=prod\n"].join) end - it "logs message with scoped fields" do - logger = TTY::Logger.new(output: output) + it "adds new custom log type" do + heart = "❤" + logger = TTY::Logger.new(output: output) do |config| + config.types = {thanks: {level: :info}} + config.handlers = [ + [:console, { + styles: { + thanks: { + symbol: heart, + label: "thanks", + color: :red, + levelpad: 1 + } + } + }] + ] + end - logger.info("Successfully deployed", app: 'myapp', env: 'prod') + logger.thanks("Great work!", app: "myapp", env: "prod") expect(output.string).to eq([ - "\e[32m#{styles[:info][:symbol]}\e[0m ", - "\e[32minfo\e[0m ", - "Successfully deployed ", - "\e[32mapp\e[0m=myapp \e[32menv\e[0m=prod\n"].join) + "\e[31m#{heart}\e[0m ", + "\e[31mthanks\e[0m ", + "Great work! ", + "\e[31mapp\e[0m=myapp \e[31menv\e[0m=prod\n"].join) + end + + it "fails to add already defined log type" do + expect { + TTY::Logger.new do |config| + config.types = {success: {level: :info}} + end + }.to raise_error(TTY::Logger::Error, "Already defined log type :success") end end