# file module tests for dealing with modification_time

- name: Initialize the test output dir
  import_tasks: initialize.yml

- name: Setup the modification time for the tests
  set_fact:
    modification_timestamp: "202202081414.00"

- name: Get stat info for the file
  stat:
    path: "{{ output_file }}"
  register: initial_file_stat

- name: Set a modification time in check_mode
  ansible.builtin.file:
    path: "{{ output_file }}"
    modification_time: "{{ modification_timestamp }}"
    modification_time_format: "%Y%m%d%H%M.%S"
  check_mode: true
  register: file_change_check_mode

- name: Re-stat the file
  stat:
    path: "{{ output_file }}"
  register: check_mode_stat

- name: Confirm check_mode did not change the file
  assert:
    that:
      - initial_file_stat.stat.mtime == check_mode_stat.stat.mtime
      # Ensure the changed flag was set
      - file_change_check_mode.changed
      # Ensure the diff is present
      # Note: file diff always contains the path
      - file_change_check_mode.diff.after | length > 1

- name: Set a modification time for real
  ansible.builtin.file:
    path: "{{ output_file }}"
    modification_time: "{{ modification_timestamp }}"
    modification_time_format: "%Y%m%d%H%M.%S"
  register: file_change_no_check_mode

- name: Stat of the file after the change
  stat:
    path: "{{ output_file }}"
  register: change_stat

- name: Confirm the modification time changed
  assert:
    that:
      - initial_file_stat.stat.mtime != change_stat.stat.mtime
      - file_change_no_check_mode.changed
      # Note: file diff always contains the path
      - file_change_no_check_mode.diff.after | length > 1

- name: Set a modification time a second time to confirm no changes or diffs
  ansible.builtin.file:
    path: "{{ output_file }}"
    modification_time: "{{ modification_timestamp }}"
    modification_time_format: "%Y%m%d%H%M.%S"
  register: file_change_no_check_mode_second

- name: Confirm no changes made registered
  assert:
    that:
      - not file_change_no_check_mode_second.changed
      # Note: file diff always contains the path
      - file_change_no_check_mode_second.diff.after | length == 1
