# encoding: utf-8 require "policy/cli" describe Policy::CLI, :sandbox, :capture do describe ".start" do subject { try_in_sandbox { described_class.start options } } shared_examples "adding a policy" do |folder: nil| let(:filename) { File.join("app", folder, "foo.rb") } it "[creates file]" do expect(filename).to be_present_in_sandbox end end # examples shared_examples "adding a spec" do |folder: nil| let(:filename) { File.join("spec/tests", folder, "foo_spec.rb") } it "[creates file]" do expect(filename).to be_present_in_sandbox end end # examples shared_examples "adding locales" do |locales, folder: nil| let(:dirname) { File.join("config/locales", folder, "foo") } it "[creates files]" do locales.each do |locale| expect("#{ dirname }/#{ locale }.yml").to be_present_in_sandbox end end end # examples context "foo" do let(:options) { %w(foo) } before { subject } it_behaves_like "adding a policy", folder: "policies" it_behaves_like "adding a spec", folder: "policies" it_behaves_like "adding locales", %w(en ru), folder: "policies" end # context context "foo -n bar/baz" do let(:options) { %w(foo -n bar/baz) } before { subject } it_behaves_like "adding a policy", folder: "bar/baz" it_behaves_like "adding a spec", folder: "bar/baz" it_behaves_like "adding locales", %w(en ru), folder: "bar/baz" it "adds namespace to the policy" do content = read_in_sandbox "app/bar/baz/foo.rb" expect(content).to include "module Sandbox" expect(content).to include " module Bar" expect(content).to include " module Baz" end it "describes the specification" do content = read_in_sandbox "spec/tests/bar/baz/foo_spec.rb" expect(content).to include "describe Sandbox::Bar::Baz::Foo do" end it "creates the proper locale" do content = read_in_sandbox "config/locales/bar/baz/foo/en.yml" expect(content).to include "# en:" expect(content).to include " sandbox/bar/baz/foo:" end end # context context "foo -a bar baz" do let(:options) { %w(foo -a bar baz) } before { subject } it_behaves_like "adding a policy", folder: "policies" it_behaves_like "adding a spec", folder: "policies" it_behaves_like "adding locales", %w(en ru), folder: "policies" it "adds attributes to the policy" do content = read_in_sandbox "app/policies/foo.rb" expect(content).to include "attr_reader :bar" expect(content).to include "attr_reader :baz" end it "checks attributes" do content = read_in_sandbox "spec/tests/policies/foo_spec.rb" expect(content).to include "let(:bar) {" expect(content).to include "let(:baz) {" end end # context context "foo -n bar baz" do let(:options) { %w(foo -n bar baz) } before { subject } it_behaves_like "adding a policy", folder: "bar/baz" it_behaves_like "adding a spec", folder: "bar/baz" it_behaves_like "adding locales", %w(en ru), folder: "bar/baz" end # context context "foo -l UA jP" do let(:options) { %w(foo -l UA jP) } before { subject } it_behaves_like "adding a policy", folder: "policies" it_behaves_like "adding a spec", folder: "policies" it_behaves_like "adding locales", %w(ua jp), folder: "policies" end # context end # describe .start end # describe Policy::CLI