"""Tests related to use of noqa inside playbooks."""

import pytest

from ansiblelint.testing import RunFromText

PLAYBOOK_PRE_TASKS = """\
---
- name: Fixture
  hosts: all
  tasks:
    - name: Bad git 1  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 2
      action: ansible.builtin.git a=b c=d
  pre_tasks:
    - name: Bad git 3  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 4
      action: ansible.builtin.git a=b c=d
"""

PLAYBOOK_POST_TASKS = """\
---
- name: Fixture
  hosts: all
  tasks:
    - name: Bad git 1  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 2
      action: ansible.builtin.git a=b c=d
  post_tasks:
    - name: Bad git 3  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 4
      action: ansible.builtin.git a=b c=d
"""

PLAYBOOK_HANDLERS = """\
---
- name: Fixture
  hosts: all
  tasks:
    - name: Bad git 1  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 2
      action: ansible.builtin.git a=b c=d
  handlers:
    - name: Bad git 3  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 4
      action: ansible.builtin.git a=b c=d
"""

PLAYBOOK_TWO_PLAYS = """\
---
- name: Fixture
  hosts: all
  tasks:
    - name: Bad git 1  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 2
      action: ansible.builtin.git a=b c=d

- name: Fixture 2
  hosts: all
  tasks:
    - name: Bad git 3  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 4
      action: ansible.builtin.git a=b c=d
"""

PLAYBOOK_WITH_BLOCK = """\
---
- name: Fixture
  hosts: all
  tasks:
    - name: Bad git 1  # noqa: latest[git]
      action: ansible.builtin.git a=b c=d
    - name: Bad git 2
      action: ansible.builtin.git a=b c=d
    - name: Block with rescue and always section
      block:
        - name: Bad git 3  # noqa: latest[git]
          action: ansible.builtin.git a=b c=d
        - name: Bad git 4
          action: ansible.builtin.git a=b c=d
      rescue:
        - name: Bad git 5  # noqa: latest[git]
          action: ansible.builtin.git a=b c=d
        - name: Bad git 6
          action: ansible.builtin.git a=b c=d
      always:
        - name: Bad git 7  # noqa: latest[git]
          action: ansible.builtin.git a=b c=d
        - name: Bad git 8
          action: ansible.builtin.git a=b c=d
"""


@pytest.mark.parametrize(
    ("playbook", "length"),
    (
        pytest.param(PLAYBOOK_PRE_TASKS, 6, id="PRE_TASKS"),
        pytest.param(PLAYBOOK_POST_TASKS, 6, id="POST_TASKS"),
        pytest.param(PLAYBOOK_HANDLERS, 6, id="HANDLERS"),
        pytest.param(PLAYBOOK_TWO_PLAYS, 6, id="TWO_PLAYS"),
        pytest.param(PLAYBOOK_WITH_BLOCK, 12, id="WITH_BLOCK"),
    ),
)
def test_pre_tasks(
    default_text_runner: RunFromText,
    playbook: str,
    length: int,
) -> None:
    """Check that skipping is possible in different playbook parts."""
    # When
    results = default_text_runner.run_playbook(playbook)

    # Then
    assert len(results) == length
