forked from GithubBackups/healthchecks
In Account Settings > My Projects, indicate read-only memberships as read-only
This commit is contained in:
parent
e424176a1f
commit
0a85c5ed12
@ -113,8 +113,8 @@ class ProfileTestCase(BaseTestCase):
|
|||||||
|
|
||||||
form = {"code": str(self.project.code), "leave_project": "1"}
|
form = {"code": str(self.project.code), "leave_project": "1"}
|
||||||
r = self.client.post("/accounts/profile/", form)
|
r = self.client.post("/accounts/profile/", form)
|
||||||
self.assertContains(r, "Left project")
|
self.assertContains(r, "Left project <strong>Alices Project</strong>")
|
||||||
self.assertNotContains(r, "Alice's Project")
|
self.assertNotContains(r, "Member")
|
||||||
|
|
||||||
self.bobs_profile.refresh_from_db()
|
self.bobs_profile.refresh_from_db()
|
||||||
self.assertFalse(self.bob.memberships.exists())
|
self.assertFalse(self.bob.memberships.exists())
|
||||||
@ -125,3 +125,28 @@ class ProfileTestCase(BaseTestCase):
|
|||||||
form = {"code": str(self.project.code), "leave_project": "1"}
|
form = {"code": str(self.project.code), "leave_project": "1"}
|
||||||
r = self.client.post("/accounts/profile/", form)
|
r = self.client.post("/accounts/profile/", form)
|
||||||
self.assertEqual(r.status_code, 400)
|
self.assertEqual(r.status_code, 400)
|
||||||
|
|
||||||
|
def test_it_shows_project_membership(self):
|
||||||
|
self.client.login(username="bob@example.org", password="password")
|
||||||
|
|
||||||
|
r = self.client.get("/accounts/profile/")
|
||||||
|
self.assertContains(r, "Alices Project")
|
||||||
|
self.assertContains(r, "Member")
|
||||||
|
|
||||||
|
def test_it_shows_readonly_project_membership(self):
|
||||||
|
self.bobs_membership.rw = False
|
||||||
|
self.bobs_membership.save()
|
||||||
|
|
||||||
|
self.client.login(username="bob@example.org", password="password")
|
||||||
|
|
||||||
|
r = self.client.get("/accounts/profile/")
|
||||||
|
self.assertContains(r, "Alices Project")
|
||||||
|
self.assertContains(r, "Read-only")
|
||||||
|
|
||||||
|
def test_it_handles_no_projects(self):
|
||||||
|
self.project.delete()
|
||||||
|
|
||||||
|
self.client.login(username="alice@example.org", password="password")
|
||||||
|
|
||||||
|
r = self.client.get("/accounts/profile/")
|
||||||
|
self.assertContains(r, "You do not have any projects. Create one!")
|
||||||
|
@ -83,10 +83,7 @@ class ProjectTestCase(BaseTestCase):
|
|||||||
self.assertFalse(member.user.project_set.exists())
|
self.assertFalse(member.user.project_set.exists())
|
||||||
|
|
||||||
# And an email should have been sent
|
# And an email should have been sent
|
||||||
subj = (
|
subj = f"You have been invited to join Alices Project on {settings.SITE_NAME}"
|
||||||
"You have been invited to join"
|
|
||||||
" Alice's Project on %s" % settings.SITE_NAME
|
|
||||||
)
|
|
||||||
self.assertHTMLEqual(mail.outbox[0].subject, subj)
|
self.assertHTMLEqual(mail.outbox[0].subject, subj)
|
||||||
|
|
||||||
def test_it_adds_readonly_team_member(self):
|
def test_it_adds_readonly_team_member(self):
|
||||||
|
@ -219,9 +219,6 @@ def profile(request):
|
|||||||
ctx["left_project"] = project
|
ctx["left_project"] = project
|
||||||
ctx["my_projects_status"] = "info"
|
ctx["my_projects_status"] = "info"
|
||||||
|
|
||||||
# Retrieve projects right before rendering the template--
|
|
||||||
# The list of the projects might have *just* changed
|
|
||||||
ctx["projects"] = list(profile.projects())
|
|
||||||
return render(request, "accounts/profile.html", ctx)
|
return render(request, "accounts/profile.html", ctx)
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ class BaseTestCase(TestCase):
|
|||||||
self.alice.save()
|
self.alice.save()
|
||||||
|
|
||||||
self.project = Project(owner=self.alice, api_key="X" * 32)
|
self.project = Project(owner=self.alice, api_key="X" * 32)
|
||||||
self.project.name = "Alice's Project"
|
self.project.name = "Alices Project"
|
||||||
self.project.badge_key = self.alice.username
|
self.project.badge_key = self.alice.username
|
||||||
self.project.save()
|
self.project.save()
|
||||||
|
|
||||||
|
@ -64,14 +64,14 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<h2>My Projects</h2>
|
<h2>My Projects</h2>
|
||||||
|
|
||||||
{% if projects %}
|
{% if profile.projects.exists %}
|
||||||
<table id="my-projects" class="table">
|
<table id="my-projects" class="table">
|
||||||
<tr>
|
<tr>
|
||||||
<th>Project</th>
|
<th>Project</th>
|
||||||
<th>My role</th>
|
<th>My role</th>
|
||||||
<th></th>
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
{% for project in profile.projects %}
|
{% for project in request.user.project_set.all %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="name">
|
<div class="name">
|
||||||
@ -80,25 +80,37 @@
|
|||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
|
<td>Owner</td>
|
||||||
<td>
|
<td>
|
||||||
{% if project.owner == request.user %}
|
|
||||||
Owner
|
|
||||||
{% else %}
|
|
||||||
Collaborator
|
|
||||||
{% endif %}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
{% if project.owner == request.user %}
|
|
||||||
<a
|
<a
|
||||||
href="{% url 'hc-project-settings' project.code %}"
|
href="{% url 'hc-project-settings' project.code %}"
|
||||||
class="pull-right">Settings</a>
|
class="pull-right">Settings</a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for m in request.user.memberships.all %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<div class="name">
|
||||||
|
<a href="{% url 'hc-checks' m.project.code %}">
|
||||||
|
{{ m.project }}
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% if m.rw %}
|
||||||
|
Member
|
||||||
{% else %}
|
{% else %}
|
||||||
|
Read-only
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
<a
|
<a
|
||||||
href="#"
|
href="#"
|
||||||
data-name="{{ project }}"
|
data-name="{{ m.project }}"
|
||||||
data-code="{{ project.code }}"
|
data-code="{{ m.project.code }}"
|
||||||
class="pull-right leave-project">Leave</a>
|
class="pull-right leave-project">Leave</a>
|
||||||
{% endif %}
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@ -112,7 +124,7 @@
|
|||||||
href="#"
|
href="#"
|
||||||
class="btn btn-default pull-right"
|
class="btn btn-default pull-right"
|
||||||
data-toggle="modal"
|
data-toggle="modal"
|
||||||
data-target="#add-project-modal">Create New Project</a>
|
data-target="#add-project-modal">Create a New Project</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% if left_project %}
|
{% if left_project %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user