---
# Various ways users want to use binary data
# Could integrate into individual modules but currently these don't all work.
# Probably easier to see them all in a single block to know what we're testing.
# When we can start testing v2 we should test that all of these work.

# In v1: The following line will traceback if it's the first task in the role.
# Does not traceback if it's the second or third etc task.
- debug: msg="{{ utf8_simple_accents|b64decode}}"

# Expected values of the written files
- name: get checksums that we expect later files to have
  copy:
    src: from_playbook
    dest: "{{ output_dir }}"

- copy:
    src: b64_utf8
    dest: "{{ output_dir }}"

- copy:
    src: b64_latin1
    dest: "{{ output_dir }}"

- stat:
    path: "{{ output_dir }}/from_playbook"
  register: from_playbook

- stat:
    path: "{{ output_dir }}/b64_utf8"
  register: b64_utf8

- stat:
    path: "{{ output_dir }}/b64_latin1"
  register: b64_latin1

# Tests themselves
- name: copy with utf-8 content in a playbook
  copy:
    content: "{{ simple_accents }}\n"
    dest: "{{ output_dir }}/from_playbook.txt"

- name: Check that copying utf-8 content matches
  stat:
    path: "{{ output_dir }}/from_playbook.txt"
  register: results

- assert:
    that:
      - 'results.stat.checksum == from_playbook.stat.checksum'

- name: copy with utf8 in a base64 encoded string
  copy:
    content: "{{ utf8_simple_accents|b64decode }}\n"
    dest: "{{ output_dir }}/b64_utf8.txt"

- name: Check that utf8 in a base64 string matches
  stat:
    path: "{{ output_dir }}/b64_utf8.txt"
  register: results

- assert:
    that:
      - 'results.stat.checksum == b64_utf8.stat.checksum'

- name: copy with latin1 in a base64 encoded string
  copy:
    content: "{{ latin1_simple_accents|b64decode }}\n"
    dest: "{{ output_dir }}/b64_latin1.txt"

- name: Check that latin1 in a base64 string matches
  stat:
    path: "{{ output_dir }}/b64_latin1.txt"
  register: results

- assert:
    that:
      - 'results.stat.checksum == b64_latin1.stat.checksum'
  # This one depends on being able to pass binary data through
  # Might be a while before we find a solution for this
  ignore_errors: True

- name: Template with a unicode string from the playbook
  template:
    src: "from_playbook_template.j2"
    dest: "{{ output_dir }}/from_playbook_template.txt"

- name: Check that writing a template from a playbook var matches
  stat:
    path: "{{ output_dir }}/from_playbook_template.txt"
  register: results

- assert:
    that:
      - 'results.stat.checksum == from_playbook.stat.checksum'

- name: Template with utf8 in a base64 encoded string
  template:
    src: "b64_utf8_template.j2"
    dest: "{{ output_dir }}/b64_utf8_template.txt"

- name: Check that writing a template from a base64 encoded utf8 string matches
  stat:
    path: "{{ output_dir }}/b64_utf8_template.txt"
  register: results

- assert:
    that:
      - 'results.stat.checksum == b64_utf8.stat.checksum'

- name: Template with latin1 in a base64 encoded string
  template:
    src: "b64_latin1_template.j2"
    dest: "{{ output_dir }}/b64_latin1_template.txt"

- name: Check that writing a template from a base64 encoded latin1 string matches
  stat:
    path: "{{ output_dir }}/b64_latin1_template.txt"
  register: results

- assert:
    that:
      - 'results.stat.checksum == b64_latin1.stat.checksum'
  # This one depends on being able to pass binary data through
  # Might be a while before we find a solution for this
  ignore_errors: True

# These might give garbled output but none of them should traceback
- debug: var=simple_accents
- debug: msg="{{ utf8_simple_accents|b64decode}}"
- debug: msg="{{ latin1_simple_accents|b64decode}}"