# Test code for win_optional_feature module
# Copyright: (c) 2019, Carson Anderson <rcanderson23@gmail.com>

# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
#
# 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: fail with invalid feature name
  win_optional_feature:
    name:
    - TelnetClient
    - FakeFeature
    state: present
  register: invalid_name
  failed_when: invalid_name.msg != "Failed to find feature 'FakeFeature'"

- name: run with check_mode
  win_optional_feature:
    name: TelnetClient
    state: present
    include_parent: true
  check_mode: yes
  register: feature_check

- name: assert check_mode
  assert:
    that:
      - feature_check.changed

- name: run without check_mode
  win_optional_feature:
    name: TelnetClient
    state: present
    include_parent: true
  register: real_feature_check

- name: assert feature installed
  assert:
    that:
      - real_feature_check.changed

- name: test idempotence for install
  win_optional_feature:
    name: TelnetClient
    state: present
    include_parent: true
  register: real_feature_check

- name: assert idempotence
  assert:
    that:
      - not real_feature_check.changed

- name: install feature with list
  win_optional_feature:
    name:
    - SimpleTCP
    - TelnetClient
    state: present
    include_parent: true
  register: install_list

- name: assert install feature with list
  assert:
    that:
    - install_list is changed

- name: install feature with list (idempotent)
  win_optional_feature:
    name:
    - SimpleTCP
    - TelnetClient
    state: present
    include_parent: true
  register: install_list_again

- name: assert install feature with list (idempotent)
  assert:
    that:
    - not install_list_again is changed

- name: removal run with check_mode
  win_optional_feature:
    name: TelnetClient
    state: absent
  check_mode: yes
  register: feature_check

- name: assert removal check_mode
  assert:
    that:
      - feature_check.changed

- name: remove feature
  win_optional_feature:
    name: TelnetClient
    state: absent
  register: real_feature_check

- name: assert feature removed
  assert:
    that:
      - real_feature_check.changed

- name: test idempotence for removal
  win_optional_feature:
    name: TelnetClient
    state: absent
  register: real_feature_check

- name: assert idempotence
  assert:
    that:
      - not real_feature_check.changed

- name: remove feature with list
  win_optional_feature:
    name:
    - SimpleTCP
    - TelnetClient
    state: absent
  register: remove_feature_list

- name: assert remove feature with list
  assert:
    that:
    - remove_feature_list is changed

- name: remove feature with list (idempotent)
  win_optional_feature:
    name:
    - SimpleTCP
    - TelnetClient
    state: absent
  register: remove_feature_list_again

- name: assert remove feature with list (idempotent)
  assert:
    that:
    - not remove_feature_list_again is changed
