---
- name: add a static route
  win_route:
    destination: "{{ destination_ip_address }}/32"
    gateway: "{{ default_gateway }}"
    metric: 1
    state: present
  register: route

- name: check if route successfully added
  win_shell: (Get-CimInstance win32_ip4PersistedrouteTable -Filter "Destination = '{{ destination_ip_address }}'").Caption
  register: route_added

- name: check route default gateway
  win_shell: (Get-CimInstance win32_ip4PersistedrouteTable -Filter "Destination = '{{ destination_ip_address }}'").NextHop
  register: route_gateway

- name: test if route successfully added
  assert:
    that:
      - route is changed
      - route_added.stdout_lines[0] == "{{ destination_ip_address }}"
      - route_gateway.stdout_lines[0] == "{{ default_gateway }}"

- name: add a static route to test idempotency
  win_route:
    destination: "{{ destination_ip_address }}/32"
    gateway: "{{ default_gateway }}"
    metric: 1
    state: present
  register: idempotent_route

- name: test idempotency
  assert:
    that:
      - idempotent_route is not changed
      - idempotent_route.output == "Static route already exists"

- name: remove route
  win_route:
    destination: "{{ destination_ip_address }}/32"
    state: absent
  register: route_removed

- name: check route is removed
  win_shell: Get-CimInstance win32_ip4PersistedrouteTable -Filter "Destination = '{{ destination_ip_address }}'"
  register: check_route_removed

- name: test route is removed
  assert:
    that:
      - route_removed is changed
      - check_route_removed.stdout == ''

- name: remove static route to test idempotency
  win_route:
    destination: "{{ destination_ip_address }}/32"
    state: absent
  register: idempotent_route_removed

- name: test idempotency
  assert:
    that:
      - idempotent_route_removed is not changed
      - idempotent_route_removed.output == "No route to remove"

- name: add route to wrong ip address
  win_route:
    destination: "715.18.0.0/32"
    gateway: "{{ default_gateway }}"
    metric: 1
    state: present
  ignore_errors: yes
  register: wrong_ip

- name: test route to wrong ip address
  assert:
    that:
      - wrong_ip is failed