Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added tests for utils/analytics #2952

Merged
merged 7 commits into from
Aug 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
88 changes: 88 additions & 0 deletions Library/Homebrew/test/utils/analytics_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
require "utils/analytics"
require "formula_installer"

describe Utils::Analytics do
describe "::os_prefix_ci" do
context "when anonymous_os_prefix_ci is not set" do
before(:each) do
described_class.clear_anonymous_os_prefix_ci_cache
end

it "returns OS_VERSION and prefix when HOMEBREW_PREFIX is not /usr/local" do
stub_const("HOMEBREW_PREFIX", "blah")
expect(described_class.os_prefix_ci).to include("#{OS_VERSION}, non-/usr/local")
end

it "includes CI when ENV['CI'] is set" do
ENV["CI"] = "true"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Make sure this gets restored at the end of the test.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ENV is already reset automatically after every test, so, it will get restored.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

expect(described_class.os_prefix_ci).to include("CI")
end

it "does not include prefix when HOMEBREW_PREFIX is /usr/local" do
stub_const("HOMEBREW_PREFIX", "/usr/local")
expect(described_class.os_prefix_ci).not_to include("non-/usr/local")
end
end
end

describe "::report_event" do
let(:f) { formula { url "foo-1.0" } }
let(:options) { FormulaInstaller.new(f).display_options(f) }
let(:action) { "#{f.full_name} #{options}".strip }

context "when ENV vars is set" do
it "returns nil when HOMEBREW_NO_ANALYTICS is true" do
ENV["HOMEBREW_NO_ANALYTICS"] = "true"
expect(described_class.report_event("install", action)).to be_nil
end

it "returns nil when HOMEBREW_NO_ANALYTICS_THIS_RUN is true" do
ENV["HOMEBREW_NO_ANALYTICS_THIS_RUN"] = "true"
expect(described_class.report_event("install", action)).to be_nil
end

it "returns nil when HOMEBREW_ANALYTICS_DEBUG is true" do
ENV.delete("HOMEBREW_NO_ANALYTICS_THIS_RUN")
ENV.delete("HOMEBREW_NO_ANALYTICS")
ENV["HOMEBREW_ANALYTICS_DEBUG"] = "true"
expect(described_class.report_event("install", action)).to be_nil
end
end
end

describe "::report_build_error" do
context "when tap is installed" do
let(:err) { BuildError.new(f, "badprg", %w[arg1 arg2], {}) }
let(:f) { formula { url "foo-1.0" } }

it "reports event if BuildError raised for a formula with a public remote repository" do
allow_any_instance_of(Tap).to receive(:custom_remote?).and_return(false)
expect(described_class).to respond_to(:report_event)
described_class.report_build_error(err)
end

it "does not report event if BuildError raised for a formula with a private remote repository" do
expect(described_class.report_build_error(err)).to be_nil
end
end

context "when formula does not have a tap" do
let(:err) { BuildError.new(f, "badprg", %w[arg1 arg2], {}) }
let(:f) { double(Formula, name: "foo", path: "blah", tap: nil) }

it "does not report event if BuildError is raised" do
expect(described_class.report_build_error(err)).to be_nil
end
end

context "when tap for a formula is not installed" do
let(:err) { BuildError.new(f, "badprg", %w[arg1 arg2], {}) }
let(:f) { double(Formula, name: "foo", path: "blah", tap: CoreTap.instance) }

it "does not report event if BuildError is raised" do
allow_any_instance_of(Pathname).to receive(:directory?).and_return(false)
expect(described_class.report_build_error(err)).to be_nil
end
end
end
end
5 changes: 5 additions & 0 deletions Library/Homebrew/utils/analytics.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
module Utils
module Analytics
class << self
def clear_anonymous_os_prefix_ci_cache
return unless instance_variable_defined?(:@anonymous_os_prefix_ci)
remove_instance_variable(:@anonymous_os_prefix_ci)
end

def os_prefix_ci
@anonymous_os_prefix_ci ||= begin
os = OS_VERSION
Expand Down