# test code for the pip module
# (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/>.

- name: create a file that we can use to fetch
  copy: content="test" dest={{ output_dir }}/orig

- name: fetch the motd
  fetch: src={{ output_dir }}/orig dest={{ output_dir }}/fetched
  register: fetched

- debug: var=fetched

# TODO: check the become and non-become forms of fetch because in one form we'll do
# the get method of the connection plugin and in the become case we'll use the
# fetch module.

- name: diff what we fetched with the original file
  shell: diff {{ output_dir }}/orig {{ output_dir }}/fetched/{{inventory_hostname}}{{ output_dir | expanduser }}/orig
  register: diff

- name: check the diff to make sure they are the same
  assert:
    that:
      'diff.stdout == ""'

- name: attempt to fetch a non-existent file - do not fail on missing
  fetch: src={{ output_dir }}/doesnotexist dest={{ output_dir }}/fetched
  register: fetch_missing_nofail

- name: check fetch missing no fail result
  assert:
    that:
      - "fetch_missing_nofail.msg"
      - "not fetch_missing_nofail|changed"

- name: attempt to fetch a non-existent file - fail on missing
  fetch: src={{ output_dir }}/doesnotexist dest={{ output_dir }}/fetched fail_on_missing=yes
  register: fetch_missing
  ignore_errors: true

- name: check fetch missing with failure
  assert:
    that:
      - "fetch_missing|failed"
      - "fetch_missing.msg"
      - "not fetch_missing|changed"

- name: attempt to fetch a directory - should not fail but return a message
  fetch: src={{ output_dir }} dest={{ output_dir }}/somedir
  register: fetch_dir

- name: check fetch directory result
  assert:
    that:
      - "not fetch_dir|changed"
      - "fetch_dir.msg"

- name: create symlink to a file that we can fetch
  file:
    path: "{{ output_dir }}/link"
    src: "{{ output_dir }}/orig"
    state: "link"

- name: fetch the file via a symlink
  fetch: src={{ output_dir }}/link dest={{ output_dir }}/fetched-link
  register: fetched

- debug: var=fetched

# TODO: check the become and non-become forms of fetch because in one form we'll do
# the get method of the connection plugin and in the become case we'll use the
# fetch module.

- name: diff what we fetched with the original file
  shell: diff {{ output_dir }}/orig {{ output_dir }}/fetched-link/{{inventory_hostname}}{{ output_dir | expanduser }}/link
  register: diff

- name: check the diff to make sure they are the same
  assert:
    that:
      'diff.stdout == ""'
