• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

rdmorganiser / rdmo / 20428555173

22 Dec 2025 10:02AM UTC coverage: 94.693% (-0.1%) from 94.814%
20428555173

Pull #1436

github

web-flow
Merge 0ffb48a5d into 57a75b09e
Pull Request #1436: Draft: add `rdmo.config` app for `Plugin` model (plugin managament)

2191 of 2304 branches covered (95.1%)

23411 of 24723 relevant lines covered (94.69%)

3.79 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.73
rdmo/projects/tests/test_commands.py
1
import io
4✔
2

3
import pytest
4✔
4

5
from django.core.management import call_command
4✔
6
from django.core.management.base import CommandError
4✔
7

8
from rdmo.projects.models import Project
4✔
9

10
projects_without_owner = [6, 7, 8, 9, 11]
4✔
11

12
prune_assignments = [
4✔
13
    ('guest', "['owner', 'guest', 'author', 'manager']", [6, 11]),
14
    ('author', "['owner', 'author', 'manager']", [6, 9, 11]),
15
    ('manager', "['owner', 'manager']", [6, 8, 9, 11]),
16
    ('owner', "['owner']", projects_without_owner)
17
]
18

19
def get_prune_output(projects, remove=False):
4✔
20
    project_output = ""
4✔
21
    for proj in projects:
4✔
22
        project_output += f'{proj.title} (id={proj.id})\n'
4✔
23
        if remove:
4✔
24
            project_output += "...removing...OK\n"
×
25
    return project_output
4✔
26

27

28
def test_prune_projects_error(db, settings):
4✔
29
    stdout, stderr = io.StringIO(), io.StringIO()
4✔
30

31
    with pytest.raises(CommandError) as e:
4✔
32
        call_command('prune_projects', '--min_role', 'unknown', stdout=stdout, stderr=stderr)
4✔
33

34
    assert str(e.value) == 'Role "unknown" does not exist'
4✔
35

36

37
@pytest.mark.parametrize('min_role,role_list,projects', prune_assignments)
4✔
38
def test_prune_projects_output(db, settings, min_role, role_list, projects):
4✔
39
    stdout, stderr = io.StringIO(), io.StringIO()
4✔
40

41
    instances = Project.objects.filter(id__in=projects).all()
4✔
42
    call_command('prune_projects', '--min_role', min_role, stdout=stdout, stderr=stderr)
4✔
43

44
    assert stdout.getvalue() == \
4✔
45
        f"Found projects without {role_list}:\n{get_prune_output(instances)}"
46
    assert not stderr.getvalue()
4✔
47

48

49
def test_prune_projects_output2(db, settings):
4✔
50
    stdout, stderr = io.StringIO(), io.StringIO()
4✔
51

52
    instances = Project.objects.filter(id__in=projects_without_owner)
4✔
53
    call_command('prune_projects', '--no-color', stdout=stdout, stderr=stderr)
4✔
54

55
    assert stdout.getvalue() == \
4✔
56
        f"Found projects without ['owner']:\n{get_prune_output(instances)}"
57
    assert not stderr.getvalue()
4✔
58

59

60
def test_prune_projects_remove(db, settings):
4✔
61
    stdout, stderr = io.StringIO(), io.StringIO()
4✔
62

63
    call_command('prune_projects', '--remove', stdout=stdout, stderr=stderr)
4✔
64

65
    std_output = stdout.getvalue()
4✔
66

67
    assert "Found projects without ['owner']:" in std_output
4✔
68
    for project_id in projects_without_owner:
4✔
69
        assert f"(id={project_id})" in std_output
4✔
70

71
    assert not stderr.getvalue()
4✔
72

73
    stdout, stderr = io.StringIO(), io.StringIO()
4✔
74
    call_command('prune_projects', '--remove', stdout=stdout, stderr=stderr)
4✔
75

76
    assert "No projects without ['owner']" in stdout.getvalue()
4✔
77
    assert not stderr.getvalue()
4✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc