- block:
    - name: Install dinginessentail-1.0-1
      dnf:
        name: dinginessentail-1.0-1
        state: present
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-1')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'results' in dnf_result"
    # ============================================================================
    - name: Install dinginessentail-1.0-1 again
      dnf:
        name: dinginessentail-1.0-1
        state: present
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "not dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-1')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'msg' in dnf_result"
    # ============================================================================
    - name: Install dinginessentail again (noop, module is idempotent)
      dnf:
        name: dinginessentail
        state: present
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            # No upgrade happened to 1.1.1
            - "not dnf_result.changed"
            # Old version still installed
            - "rpm_result.stdout.startswith('dinginessentail-1.0-1')"
    # ============================================================================
    - name: Install dinginessentail-1:1.0-2
      dnf:
        name: "dinginessentail-1:1.0-2.{{ ansible_architecture }}"
        state: present
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-2')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'results' in dnf_result"
    # ============================================================================
    - name: Update to the latest dinginessentail
      dnf:
        name: dinginessentail
        state: latest
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.1-1')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'results' in dnf_result"
    # ============================================================================
    - name: Install dinginessentail-1.0-1 from a file (downgrade)
      dnf:
        name: "{{ repodir }}/dinginessentail-1.0-1.{{ ansible_architecture }}.rpm"
        state: present
        allow_downgrade: True
        disable_gpg_check: True
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-1')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'results' in dnf_result"

    - name: Remove dinginessentail
      dnf:
        name: dinginessentail
        state: absent
    # ============================================================================
    - name: Install dinginessentail-1.0-1 from a file
      dnf:
        name: "{{ repodir }}/dinginessentail-1.0-1.{{ ansible_architecture }}.rpm"
        state: present
        disable_gpg_check: True
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-1')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'results' in dnf_result"
    # ============================================================================
    - name: Install dinginessentail-1.0-1 from a file again
      dnf:
        name: "{{ repodir }}/dinginessentail-1.0-1.{{ ansible_architecture }}.rpm"
        state: present
        disable_gpg_check: True
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "not dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-1')"
    # ============================================================================
    - name: Install dinginessentail-1.0-2 from a file
      dnf:
        name: "{{ repodir }}/dinginessentail-1.0-2.{{ ansible_architecture }}.rpm"
        state: present
        disable_gpg_check: True
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-2')"

    - name: Verify dnf module outputs
      assert:
        that:
            - "'results' in dnf_result"
    # ============================================================================
    - name: Install dinginessentail-1.0-2 from a file again
      dnf:
        name: "{{ repodir }}/dinginessentail-1.0-2.{{ ansible_architecture }}.rpm"
        state: present
        disable_gpg_check: True
      register: dnf_result

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result

    - name: Verify installation
      assert:
        that:
            - "not dnf_result.changed"
            - "rpm_result.stdout.startswith('dinginessentail-1.0-2')"
    # ============================================================================
    - name: Remove dinginessentail
      dnf:
        name: dinginessentail
        state: absent

    - name: Try to install incompatible arch
      dnf:
        name: "{{ repodir_ppc64 }}/dinginessentail-1.0-1.ppc64.rpm"
        state: present
      register: dnf_result
      ignore_errors: yes

    - name: Check dinginessentail with rpm
      shell: rpm -q dinginessentail
      register: rpm_result
      ignore_errors: yes

    - name: Verify installation
      assert:
        that:
            - "rpm_result.rc == 1"
            - "not dnf_result.changed"
            - "dnf_result is failed"
    # ============================================================================

    # Should install dinginessentail-with-weak-dep and dinginessentail-weak-dep
    - name: Install package with defaults
      dnf:
        name: dinginessentail-with-weak-dep
        state: present

    - name: Check if dinginessentail-with-weak-dep is installed
      shell: rpm -q dinginessentail-with-weak-dep
      register: rpm_main_result

    - name: Check if dinginessentail-weak-dep is installed
      shell: rpm -q dinginessentail-weak-dep
      register: rpm_weak_result

    - name: Verify install with weak deps
      assert:
        that:
        - rpm_main_result.rc == 0
        - rpm_weak_result.rc == 0

    - name: Uninstall dinginessentail weak dep packages
      dnf:
        name:
        - dinginessentail-with-weak-dep
        - dinginessentail-weak-dep
        state: absent

    - name: Install package with weak deps but skip weak deps
      dnf:
        name: dinginessentail-with-weak-dep
        install_weak_deps: False
        state: present

    - name: Check if dinginessentail-with-weak-dep is installed
      shell: rpm -q dinginessentail-with-weak-dep
      register: rpm_main_result

    - name: Check if dinginessentail-weak-dep is installed
      shell: rpm -q dinginessentail-weak-dep
      register: rpm_weak_result
      ignore_errors: yes

    - name: Verify install without weak deps
      assert:
        that:
        - rpm_main_result.rc == 0
        - rpm_weak_result.rc == 1  # the weak dependency shouldn't be installed

    # https://github.com/ansible/ansible/issues/55938
    - name: Install dinginessentail-*
      dnf:
        name: dinginessentail-*
        state: present

    - name: Uninstall dinginessentail-*
      dnf:
        name: dinginessentail-*
        state: absent

    - name: Check if all dinginessentail packages are removed
      shell: rpm -qa dinginessentail-* | wc -l
      register: rpm_result

    - name: Verify rpm result
      assert:
        that:
          - rpm_result.stdout == '0'
  always:
    - name: Clean up
      dnf:
        name:
        - dinginessentail
        - dinginessentail-with-weak-dep
        - dinginessentail-weak-dep
        state: absent
