require 'spec_helper' describe PolicyManager::PortabilityRequest do before :each do PolicyManager::Term.create(description: "el", rule: "age") @config = PolicyManager::Config.setup do |c| c.from_email = "foo@bar.org" c.admin_email_inbox = "foo@baaz.org" c.add_rule({name: "age", validates_on: [:create, :update], if: ->(o){ o.enabled_for_validation } }) c.exporter = { path: Rails.root + "tmp/export", resource: User , index_template: ' <h1>index template, custom</h1> <ul> <% @collection.each do |rule| %> <li><%= link_to rule.name, "./#{rule.name}/index.html" %></li> <% end %> </ul>', layout: 'portability_requests', after_zip: ->(zip_path, resource){ puts "THIS IS GREAT #{zip_path} was zipped, now what ??" } } c.add_portability_rule({ name: "exportable_data", collection: :foo_data, template: "hello , here a collection will be rendered <%= @collection.to_json %> <%= will_paginate(@collection, renderer: PolicyManager::PaginatorRenderer) %>", per: 10 }) end PolicyManager::Term.create(description: "el", rule: "age") end it "user export will generate folder, layout, templates" do User.any_instance.stubs(:enabled_for_validation).returns(false) User.any_instance.stubs(:foo_data).returns( (1..100).to_a) user = User.create(email: "a@a.cl") assert !user.errors.any? preq = user.portability_requests.create assert preq.pending? PolicyManager::ExporterHandler.any_instance.stubs(:clear!).returns(true) preq.confirm! assert preq.progress? notification = ActionMailer::Base.deliveries.last assert notification.present? expect(File.exists?(Rails.root.join("tmp/export/#{user.id}"))).to be_truthy paths = Dir.glob( Rails.root.join("tmp/export/#{user.id}") + "*") names = paths.map{|o| File.basename(o) } arr = names - ["exportable_data", "index.html", "my_account", "my_account_from_template"] assert arr.empty? noko = Nokogiri::HTML.parse( File.open(paths.first + "/index.html").read ) assert noko.css("h1").text == "layout header" assert noko.css("footer").text == "layout footer" expect(preq.reload).to be_completed notification = ActionMailer::Base.deliveries.last assert Nokogiri::HTML.parse(notification.body.raw_source).css("a").attr("href").value.include?("#{user.id}-out.zip") FileUtils.rm_rf(Rails.root.join("tmp/export/#{user.id}")) FileUtils.rm_rf(Rails.root.join("tmp/export/#{user.id}-out.zip")) end end