---
# To run me manually, use: -i "localhost,"
- hosts: localhost
  connection: local
  gather_facts: no
  vars:
    - testdir: /tmp/ansible-rcopy
    - filesdir: test_recursive_copy/files
  tasks:

    #
    # First, regression tests for single-file behavior
    #

    - name: "src single file, dest file"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/file1
      register: res
    - command: test -f {{testdir}}/file1
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/file1
      register: res
    - command: test "{{res.changed}}" = "False"

    - name: "src single file, dest dir w/trailing slash"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/
      register: res
    - command: test -f {{testdir}}/test1
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}/
      register: res
    - command: test "{{res.changed}}" = "False"

    - name: "src single file, dest dir wo/trailing slash - doesn't behave in sane way"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}
      register: res
    - shell: test -f {{testdir}}/test1
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir/subdir2/subdir3/test1 dest={{testdir}}
      register: res
    - command: test "{{res.changed}}" = "False"

    #
    # Now, test recursive behavior
    #

    - name: "src dir w/trailing slash, dest w/trailing slash"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir/ dest={{testdir}}/
      register: res
    - command: test -d {{testdir}}/subdir2
    - command: test -d {{testdir}}/subdir2/subdir3
    - command: test -d {{testdir}}/subdir2/subdir3
    - command: test -f {{testdir}}/subdir2/subdir3/test1
    - command: test -f {{testdir}}/subdir2/subdir3/test2
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir/ dest={{testdir}}/
      register: res
    - command: test "{{res.changed}}" = "False"

    # Expecting the same behavior
    - name: "src dir w/trailing slash, dest wo/trailing slash"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir/ dest={{testdir}}
      register: res
    - command: test -d {{testdir}}/subdir2
    - command: test -d {{testdir}}/subdir2/subdir3
    - command: test -d {{testdir}}/subdir2/subdir3
    - command: test -f {{testdir}}/subdir2/subdir3/test1
    - command: test -f {{testdir}}/subdir2/subdir3/test2
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir/ dest={{testdir}}
      register: res
    - command: test "{{res.changed}}" = "False"

    - name: "src dir wo/trailing slash, dest w/trailing slash"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir dest={{testdir}}/
      register: res
    - command: test -d {{testdir}}/subdir/subdir2
    - command: test -d {{testdir}}/subdir/subdir2/subdir3
    - command: test -d {{testdir}}/subdir/subdir2/subdir3
    - command: test -f {{testdir}}/subdir/subdir2/subdir3/test1
    - command: test -f {{testdir}}/subdir/subdir2/subdir3/test2
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir dest={{testdir}}/
      register: res
    - command: test "{{res.changed}}" = "False"

    # Expecting the same behavior
    - name: "src dir wo/trailing slash, dest wo/trailing slash"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir dest={{testdir}}
      register: res
    - command: test -d {{testdir}}/subdir/subdir2
    - command: test -d {{testdir}}/subdir/subdir2/subdir3
    - command: test -d {{testdir}}/subdir/subdir2/subdir3
    - command: test -f {{testdir}}/subdir/subdir2/subdir3/test1
    - command: test -f {{testdir}}/subdir/subdir2/subdir3/test2
    - command: test "{{res.changed}}" = "True"
    - copy: src={{filesdir}}/subdir dest={{testdir}}
      register: res
    - command: test "{{res.changed}}" = "False"


    - name: "Verifying notify handling for recursive files"
      command: rm -rf {{testdir}}
    - file: state=directory dest={{testdir}}
    - copy: src={{filesdir}}/subdir dest={{testdir}}
      notify:
        - files changed
    - meta: flush_handlers
    - command: test -f {{testdir}}/notify_fired

    - command: rm {{testdir}}/notify_fired
    - copy: src={{filesdir}}/subdir dest={{testdir}}
      notify:
        - files changed
    - meta: flush_handlers
    - command: test ! -f {{testdir}}/notify_fired

  handlers:
    - name: files changed
      command: touch {{testdir}}/notify_fired