# test code for the copy module and action plugin
# (c) 2014, Michael DeHaan <michael.dehaan@gmail.com>

# This file is part of Ansible
#
# Ansible is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Ansible is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Ansible.  If not, see <http://www.gnu.org/licenses/>.

# FIXME: replace all fail_when's with asserts

- set_fact: output_file={{output_dir}}/foo.txt

- name: initiate a basic copy
  copy: src=foo.txt dest={{output_file}}
  register: copy_result

- assert: { that: "'changed' in copy_result" }
- assert: { that: "'dest' in copy_result" }
- assert: { that: "'group' in copy_result" }
- assert: { that: "'gid' in copy_result" }
- assert: { that: "'md5sum' in copy_result" }
- assert: { that: "'owner' in copy_result" }
- assert: { that: "'size' in copy_result" }
- assert: { that: "'src' in copy_result" }
- assert: { that: "'state' in copy_result" }
- assert: { that: "'uid' in copy_result" }


- name: verify that the file was marked as changed
  assert: { that: "copy_result.changed == true" }

- name: verify that the file md5sum is correct
  assert: { that: "copy_result.md5sum == 'c47397529fe81ab62ba3f85e9f4c71f2'" }

- name: check the stat results of the file
  stat: path={{output_file}}
  register: stat_results

- debug: var=stat_results

- assert: { that: "stat_results.stat.exists == true" }
- assert: { that: "stat_results.stat.isblk == false" }
- assert: { that: "stat_results.stat.isfifo == false" }
- assert: { that: "stat_results.stat.isreg == true" }
- assert: { that: "stat_results.stat.issock == false" }
- assert: { that: "stat_results.stat.md5 == 'c47397529fe81ab62ba3f85e9f4c71f2'" }

- name: overwrite the file via same means
  copy: src=foo.txt dest={{output_file}}
  register: copy_result2

- name: verify the copy was marked unchanged
  assert: { that: "not copy_result2|changed" }

- name: overwrite the file using the content system
  copy: content="modified" dest={{output_file}}
  register: copy_result3

- name: verify the copy result was marked changed
  assert: { that: "copy_result3|changed" }

- name: overwrite the file again using the content system
  copy: content="modified" dest={{output_file}}
  register: copy_result4
  
- name: verify the copy result was marked unchanged
  assert: { that: "not copy_result4|changed" }

# TODO: test recursive copy
# TODO: test copy where destination is a directory like {{output_dir}}/ 
# TODO: test that copy fails if the path does not exist
# TODO: ...