describe 'Kumogata::Client#diff' do
  let(:drupal_single_instance_template) do
    path = File.expand_path('../Drupal_Single_Instance.template', __FILE__)
    open(path) {|f| f.read }
  end

  let(:drupal_single_instance_template_rb) do
    path = File.expand_path('../Drupal_Single_Instance.template.rb', __FILE__)
    open(path) {|f| f.read }
  end

  let(:drupal_single_instance_template_yaml) do
    path = File.expand_path('../Drupal_Single_Instance.template.yml', __FILE__)
    open(path) {|f| f.read }
  end

  it 'compare templates logically' do
    json_template = drupal_single_instance_template
    json_template.sub!('localhost', '127.0.0.1')
    json_template.sub!('"ToPort" : "80"', '"ToPort" : "8080"')

    tempfile(json_template, '.templates') do |js|
      tempfile(drupal_single_instance_template_rb, '.rb') do |rb|
        diff = ruby_template = run_client(:diff, :arguments => [js.path, rb.path], :options => {:color => false})
        diff = diff.split(/\n/).slice(2..-1).join("\n")

        expect(diff).to eq((<<-EOS).chomp)
@@ -257,7 +257,7 @@
                       {
                         "Ref": "DBUsername"
                       },
-                      "'@'127.0.0.1' IDENTIFIED BY '",
+                      "'@'localhost' IDENTIFIED BY '",
                       {
                         "Ref": "DBPassword"
                       },
@@ -437,7 +437,7 @@
           {
             "IpProtocol": "tcp",
             "FromPort": "80",
-            "ToPort": "8080",
+            "ToPort": "80",
             "CidrIp": "0.0.0.0/0"
           },
           {
        EOS
      end
    end
  end

  it 'compare yaml templates logically' do
    yaml_template = drupal_single_instance_template_yaml
    yaml_template.sub!('localhost', '127.0.0.1')
    yaml_template.sub!('ToPort: 80', 'ToPort: 8080')

    tempfile(yaml_template, '.yml') do |yaml|
      tempfile(drupal_single_instance_template_rb, '.rb') do |rb|
        diff = ruby_template = run_client(:diff, :arguments => [yaml.path, rb.path], :options => {:color => false})
        diff = diff.split(/\n/).slice(2..-1).join("\n")

        expect(diff).to eq((<<-EOS).chomp)
@@ -257,7 +257,7 @@
                       {
                         "Ref": "DBUsername"
                       },
-                      "'@'127.0.0.1' IDENTIFIED BY '",
+                      "'@'localhost' IDENTIFIED BY '",
                       {
                         "Ref": "DBPassword"
                       },
@@ -437,7 +437,7 @@
           {
             "IpProtocol": "tcp",
             "FromPort": "80",
-            "ToPort": "8080",
+            "ToPort": "80",
             "CidrIp": "0.0.0.0/0"
           },
           {
        EOS
      end
    end
  end

  it 'compare templates logically with "-w"' do
    json_template = drupal_single_instance_template
    json_template.sub!('localhost', '127.0.0.1')
    json_template.sub!('"ToPort" : "80"', '"ToPort" : "8080"')

    tempfile(json_template, '.templates') do |js|
      tempfile(drupal_single_instance_template_rb, '.rb') do |rb|
        diff = ruby_template = run_client(:diff, :arguments => [js.path, rb.path], :options => {:color => false, :ignore_all_space => true})
        diff = diff.split(/\n/).slice(2..-1).join("\n")

        expect(diff).to eq((<<-EOS).chomp)
@@ -257,7 +257,7 @@
                       {
                         "Ref": "DBUsername"
                       },
-                      "'@'127.0.0.1' IDENTIFIED BY '",
+                      "'@'localhost' IDENTIFIED BY '",
                       {
                         "Ref": "DBPassword"
                       },
@@ -437,7 +437,7 @@
           {
             "IpProtocol": "tcp",
             "FromPort": "80",
-            "ToPort": "8080",
+            "ToPort": "80",
             "CidrIp": "0.0.0.0/0"
           },
           {
        EOS
      end
    end
  end

  it 'compare templates logically with whitespace' do
    json_template = drupal_single_instance_template
    json_template.sub!('localhost', 'local host')

    tempfile(json_template, '.templates') do |js|
      tempfile(drupal_single_instance_template_rb, '.rb') do |rb|
        diff = ruby_template = run_client(:diff, :arguments => [js.path, rb.path], :options => {:color => false})
        diff = diff.split(/\n/).slice(2..-1).join("\n")

        expect(diff).to eq((<<-EOS).chomp)
@@ -257,7 +257,7 @@
                       {
                         "Ref": "DBUsername"
                       },
-                      "'@'local host' IDENTIFIED BY '",
+                      "'@'localhost' IDENTIFIED BY '",
                       {
                         "Ref": "DBPassword"
                       },
        EOS
      end
    end
  end

  it 'compare templates logically with whitespace and "-w"' do
    json_template = drupal_single_instance_template
    json_template.sub!('localhost', 'local host')

    tempfile(json_template, '.templates') do |js|
      tempfile(drupal_single_instance_template_rb, '.rb') do |rb|
        diff = ruby_template = run_client(:diff, :arguments => [js.path, rb.path], :options => {:color => false, :ignore_all_space => true})
        expect(diff).to be_empty
      end
    end
  end
end