- name: Prepare random number
  set_fact:
    random_postfix: "{{ 1000 | random }}{{ resource_group | hash('md5') | truncate(7, True, '') }}"
  run_once: yes

- name: Create instance of SQL Server -- check mode
  azure_rm_sqlserver:
    resource_group: "{{ resource_group }}"
    name: "sqlsrv{{ random_postfix }}"
    location: eastus
    admin_username: mylogin
    admin_password: Testpasswordxyz12!
  check_mode: yes
  register: output
- name: Assert the resource instance is well created
  assert:
    that:
      - output.changed

- name: Create instance of SQL Server
  azure_rm_sqlserver:
    resource_group: "{{ resource_group }}"
    name: "sqlsrv{{ random_postfix }}"
    location: eastus
    admin_username: mylogin
    admin_password: Testpasswordxyz12!
    tags:
      aaa: bbb
  register: output
- name: Assert the resource instance is well created
  assert:
    that:
      - output.changed
      - output.state == 'Ready'

- name: Create again instance of SQL Server
  azure_rm_sqlserver:
    resource_group: "{{ resource_group }}"
    name: "sqlsrv{{ random_postfix }}"
    location: eastus
    admin_username: mylogin
    admin_password: Testpasswordxyz12!
  register: output
- name: Assert the state has not changed
  assert:
    that:
      - output.changed == false
      - output.state == 'Ready'

# azure_rm_sqlserver_facts tests

- name: Gather facts SQL Server
  azure_rm_sqlserver_facts:
    resource_group: "{{ resource_group }}"
    server_name: "sqlsrv{{ random_postfix }}"
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.servers.sqlsrv{{ random_postfix }}.id != None
      - output.servers.sqlsrv{{ random_postfix }}.name == "sqlsrv{{ random_postfix }}"
      - output.servers.sqlsrv{{ random_postfix }}.type != None
      - output.servers.sqlsrv{{ random_postfix }}.location != None
      - output.servers.sqlsrv{{ random_postfix }}.kind != None
      - output.servers.sqlsrv{{ random_postfix }}.version != None
      - output.servers.sqlsrv{{ random_postfix }}.state != None
      - output.servers.sqlsrv{{ random_postfix }}.fully_qualified_domain_name != None
      - output.servers.sqlsrv{{ random_postfix }}.tags.aaa == 'bbb'

- name: Gather facts SQL Server - unexisting
  azure_rm_sqlserver_facts:
    resource_group: "{{ resource_group }}"
    server_name: "unexisting"
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.servers == {}

- name: Gather facts SQL Server - list
  azure_rm_sqlserver_facts:
    resource_group: "{{ resource_group }}"
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.servers.sqlsrv{{ random_postfix }}.id != None
      - output.servers.sqlsrv{{ random_postfix }}.name == "sqlsrv{{ random_postfix }}"
      - output.servers.sqlsrv{{ random_postfix }}.type != None
      - output.servers.sqlsrv{{ random_postfix }}.location != None
      - output.servers.sqlsrv{{ random_postfix }}.kind != None
      - output.servers.sqlsrv{{ random_postfix }}.version != None
      - output.servers.sqlsrv{{ random_postfix }}.state != None
      - output.servers.sqlsrv{{ random_postfix }}.fully_qualified_domain_name != None

# azure_rm_sqldatabase tests

- name: Create instance of SQL Database -- check mode
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
    location: eastus
  check_mode: yes
  register: output
- name: Assert the resource instance is well created
  assert:
    that:
      - output.changed

- name: Create instance of SQL Database
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
    location: eastus
    tags:
      aaa: bbb
  register: output
- name: Assert the resource instance is well created
  assert:
    that:
      - output.changed
      - output.status == 'Online'

- name: Create again instance of SQL Database
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
    location: eastus
    tags:
      aaa: bbb
  register: output
- name: Assert the state has not changed
  assert:
    that:
      - output.changed == false
      - output.status == 'Online'

# test database facter:
- name: Create second SQL Database
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}second
    location: eastus

- name: Gather facts SQL Database
  azure_rm_sqldatabase_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.databases[0].id != None
      - output.databases[0].name != None
      - output.databases[0].location != None
      - output.databases[0].sku.name != None
      - output.databases[0].sku.tier != None
      - output.databases[0].sku.capacity != None
      - output.databases[0].kind != None
      - output.databases[0].status != None

- name: Gather facts SQL Database
  azure_rm_sqldatabase_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.databases[0].id != None
      - output.databases[0].name != None
      - output.databases[0].location != None
      - output.databases[0].sku.name != None
      - output.databases[0].sku.tier != None
      - output.databases[0].sku.capacity != None
      - output.databases[0].kind != None
      - output.databases[0].status != None
      - output.databases[1].id != None
      - output.databases[1].name != None
      - output.databases[1].location != None
      - output.databases[1].sku.name != None
      - output.databases[1].sku.tier != None
      - output.databases[1].sku.capacity != None
      - output.databases[1].kind != None
      - output.databases[1].status != None

- name: Delete instance of secondary database
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}second
    state: absent

# clean up databases
- name: Delete instance of SQL Database -- check mode
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
    state: absent
  check_mode: yes
  register: output
- name: Assert the state has changed
  assert:
    that:
      - output.changed

- name: Delete instance of SQL Database
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
    state: absent
  register: output
- name: Assert the state has changed
  assert:
    that:
      - output.changed

- name: Delete unexisting instance of SQL Database
  azure_rm_sqldatabase:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
    state: absent
  register: output
- name: Assert the state has changed
  assert:
    that:
      - output.changed == false

# test database facts without databases
- name: Gather facts SQL Database
  azure_rm_sqldatabase_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: database{{ random_postfix }}
  register: output
- name: Assert that empty dictionary was returned
  assert:
    that:
      - output.changed == False
      - output.databases | length == 0

- name: Gather facts SQL Database
  azure_rm_sqldatabase_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
  register: output
- name: Assert that empty dictionary was returned (one database is there by default)
  assert:
    that:
      - output.changed == False
      - output.databases | length == 1

# azure_rm_sqlfirewallrule tests

- name: Create instance of Firewall Rule -- check mode
  azure_rm_sqlfirewallrule:
    resource_group: "{{ resource_group }}"
    server_name: "sqlsrv{{ random_postfix }}"
    name: firewallrule{{ random_postfix }}
    start_ip_address: 172.28.10.136
    end_ip_address: 172.28.10.138
  check_mode: yes
  register: output
- name: Assert the resource instance is well created
  assert:
    that:
      - output.changed

- name: Create instance of Firewall Rule
  azure_rm_sqlfirewallrule:
    resource_group: "{{ resource_group }}"
    server_name: "sqlsrv{{ random_postfix }}"
    name: firewallrule{{ random_postfix }}
    start_ip_address: 172.28.10.136
    end_ip_address: 172.28.10.138
  register: output
- name: Assert the resource instance is well created
  assert:
    that:
      - output.changed

- name: Create again instance of Firewall Rule
  azure_rm_sqlfirewallrule:
    resource_group: "{{ resource_group }}"
    server_name: "sqlsrv{{ random_postfix }}"
    name: firewallrule{{ random_postfix }}
    start_ip_address: 172.28.10.136
    end_ip_address: 172.28.10.138
  register: output
- name: Assert the state has not changed
  assert:
    that:
      - output.changed == false

#
# azure_rm_sqlserverfirewallrule_facts
#

- name: Create Firewall Rule - second
  azure_rm_sqlfirewallrule:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: firewallrule{{ random_postfix }}second
    start_ip_address: 172.28.10.136
    end_ip_address: 172.28.10.138

- name: Gather facts SQL Firewall Rule
  azure_rm_sqlfirewallrule_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: firewallrule{{ random_postfix }}
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.rules[0].id != None
      - output.rules[0].resource_group != None
      - output.rules[0].server_name != None
      - output.rules[0].name != None
      - output.rules[0].start_ip_address != None
      - output.rules[0].end_ip_address != None

- name: Gather facts SQL Firewall Rule
  azure_rm_sqlfirewallrule_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
  register: output
- name: Assert that facts are returned
  assert:
    that:
      - output.changed == False
      - output.rules[0].id != None
      - output.rules[0].id != None
      - output.rules[0].resource_group != None
      - output.rules[0].server_name != None
      - output.rules[0].name != None
      - output.rules[0].start_ip_address != None
      - output.rules[0].end_ip_address != None
      - output.rules[1].id != None
      - output.rules[1].resource_group != None
      - output.rules[1].server_name != None
      - output.rules[1].name != None
      - output.rules[1].start_ip_address != None
      - output.rules[1].end_ip_address != None

- name: Delete instance of Firewall Rule
  azure_rm_sqlfirewallrule:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: firewallrule{{ random_postfix }}
    state: absent
- name: Delete instance of Firewall Rule
  azure_rm_sqlfirewallrule:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: firewallrule{{ random_postfix }}second
    state: absent

- name: Gather facts SQL Firewall Rule
  azure_rm_sqlfirewallrule_facts:
    resource_group: "{{ resource_group }}"
    server_name: sqlsrv{{ random_postfix }}
    name: firewallrule{{ random_postfix }}
  register: output
- name: Assert that empty dictionary was returned
  assert:
    that:
      - output.changed == False
      - output.rules | length == 0

# finalise & clean up azure_rm_sqlserver test

- name: Delete instance of SQL Server -- check mode
  azure_rm_sqlserver:
    resource_group: "{{ resource_group }}"
    name: "sqlsrv{{ random_postfix }}"
    state: absent
  check_mode: yes
  register: output
- name: Assert the state has changed
  assert:
    that:
      - output.changed

- name: Delete instance of SQL Server
  azure_rm_sqlserver:
    resource_group: "{{ resource_group }}"
    name: "sqlsrv{{ random_postfix }}"
    state: absent
  register: output
- name: Assert the state has changed
  assert:
    that:
      - output.changed

- name: Delete unexisting instance of SQL Server
  azure_rm_sqlserver:
    resource_group: "{{ resource_group }}"
    name: "sqlsrv{{ random_postfix }}"
    state: absent
  register: output
- name: Assert the state has changed
  assert:
    that:
      - output.changed == false
