Drop Check.user_id and Channel.user_id (obsolete, using project_id now)

This commit is contained in:
Pēteris Caune 2019-01-18 17:24:02 +02:00
parent 512c67a8f9
commit 0994006603
No known key found for this signature in database
GPG Key ID: E28D7679E9A9EDE2
49 changed files with 136 additions and 188 deletions

View File

@ -6,10 +6,8 @@ class BadgesTestCase(BaseTestCase):
def test_it_shows_badges(self): def test_it_shows_badges(self):
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")
Check.objects.create(user=self.alice, tags="foo a-B_1 baz@", Check.objects.create(project=self.project, tags="foo a-B_1 baz@")
project=self.project) Check.objects.create(project=self.bobs_project, tags="bobs-tag")
Check.objects.create(user=self.bob, tags="bobs-tag",
project=self.bobs_project)
r = self.client.get("/accounts/profile/badges/") r = self.client.get("/accounts/profile/badges/")
self.assertContains(r, "foo.svg") self.assertContains(r, "foo.svg")

View File

@ -9,8 +9,7 @@ class CloseAccountTestCase(BaseTestCase):
@patch("hc.payments.models.Subscription.cancel") @patch("hc.payments.models.Subscription.cancel")
def test_it_works(self, mock_cancel): def test_it_works(self, mock_cancel):
Check.objects.create(user=self.alice, tags="foo a-B_1 baz@", Check.objects.create(project=self.project, tags="foo a-B_1 baz@")
project=self.project)
Subscription.objects.create(user=self.alice, subscription_id="123") Subscription.objects.create(user=self.alice, subscription_id="123")
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")

View File

@ -53,7 +53,7 @@ class LoginTestCase(BaseTestCase):
self.assertRedirects(r, "/checks/") self.assertRedirects(r, "/checks/")
def test_it_handles_password_login_with_redirect(self): def test_it_handles_password_login_with_redirect(self):
check = Check.objects.create(user=self.alice, project=self.project) check = Check.objects.create(project=self.project)
form = { form = {
"action": "login", "action": "login",

View File

@ -67,7 +67,7 @@ class ProfileTestCase(BaseTestCase):
self.assertEqual(self.project.api_key_readonly, "") self.assertEqual(self.project.api_key_readonly, "")
def test_it_sends_report(self): def test_it_sends_report(self):
check = Check(name="Test Check", user=self.alice, project=self.project) check = Check(project=self.project, name="Test Check")
check.last_ping = now() check.last_ping = now()
check.save() check.save()
@ -82,7 +82,7 @@ class ProfileTestCase(BaseTestCase):
self.assertIn("Test Check", message.body) self.assertIn("Test Check", message.body)
def test_it_skips_report_if_no_pings(self): def test_it_skips_report_if_no_pings(self):
check = Check(name="Test Check", user=self.alice, project=self.project) check = Check(project=self.project, name="Test Check")
check.save() check.save()
sent = self.profile.send_report() sent = self.profile.send_report()
@ -91,7 +91,7 @@ class ProfileTestCase(BaseTestCase):
self.assertEqual(len(mail.outbox), 0) self.assertEqual(len(mail.outbox), 0)
def test_it_skips_report_if_no_recent_pings(self): def test_it_skips_report_if_no_recent_pings(self):
check = Check(name="Test Check", user=self.alice, project=self.project) check = Check(project=self.project, name="Test Check")
check.last_ping = now() - td(days=365) check.last_ping = now() - td(days=365)
check.save() check.save()
@ -101,7 +101,7 @@ class ProfileTestCase(BaseTestCase):
self.assertEqual(len(mail.outbox), 0) self.assertEqual(len(mail.outbox), 0)
def test_it_sends_nag(self): def test_it_sends_nag(self):
check = Check(name="Test Check", user=self.alice, project=self.project) check = Check(project=self.project, name="Test Check")
check.status = "down" check.status = "down"
check.last_ping = now() check.last_ping = now()
check.save() check.save()
@ -120,7 +120,7 @@ class ProfileTestCase(BaseTestCase):
self.assertIn("Test Check", message.body) self.assertIn("Test Check", message.body)
def test_it_skips_nag_if_none_down(self): def test_it_skips_nag_if_none_down(self):
check = Check(name="Test Check", user=self.alice, project=self.project) check = Check(project=self.project, name="Test Check")
check.last_ping = now() check.last_ping = now()
check.save() check.save()

View File

@ -7,10 +7,10 @@ class ProjectModelTestCase(BaseTestCase):
def test_num_checks_available_handles_multiple_projects(self): def test_num_checks_available_handles_multiple_projects(self):
# One check in Alice's primary project: # One check in Alice's primary project:
Check.objects.create(user=self.alice, project=self.project) Check.objects.create(project=self.project)
# One check in Alice's secondary project: # One check in Alice's secondary project:
p2 = Project.objects.create(owner=self.alice) p2 = Project.objects.create(owner=self.alice)
Check.objects.create(user=self.alice, project=p2) Check.objects.create(project=p2)
self.assertEqual(self.project.num_checks_available(), 18) self.assertEqual(self.project.num_checks_available(), 18)

View File

@ -16,15 +16,14 @@ class PruneUsersTestCase(BaseTestCase):
self.charlie.save() self.charlie.save()
# Charlie has one demo check # Charlie has one demo check
project =Project.objects.create(owner=self.charlie) charlies_project = Project.objects.create(owner=self.charlie)
Check(user=self.charlie, project=project).save() Check(project=charlies_project).save()
Command().handle() Command().handle()
self.assertEqual(User.objects.filter(username="charlie").count(), 0) self.assertEqual(User.objects.filter(username="charlie").count(), 0)
self.assertEqual(Check.objects.count(), 0) self.assertEqual(Check.objects.count(), 0)
def test_it_leaves_team_members_alone(self): def test_it_leaves_team_members_alone(self):
self.bob.date_joined = self.year_ago self.bob.date_joined = self.year_ago
self.bob.last_login = self.year_ago self.bob.last_login = self.year_ago

View File

@ -8,8 +8,7 @@ class SwitchTeamTestCase(BaseTestCase):
self.bobs_profile.current_project = None self.bobs_profile.current_project = None
self.bobs_profile.save() self.bobs_profile.save()
c = Check(user=self.alice, name="This belongs to Alice", c = Check(project=self.project, name="This belongs to Alice")
project=self.project)
c.save() c.save()
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -58,11 +58,11 @@ def _make_user(email):
profile.current_project = project profile.current_project = project
profile.save() profile.save()
check = Check(user=user, project=project) check = Check(project=project)
check.name = "My First Check" check.name = "My First Check"
check.save() check.save()
channel = Channel(user=user, project=project) channel = Channel(project=project)
channel.kind = "email" channel.kind = "email"
channel.value = email channel.value = email
channel.email_verified = True channel.email_verified = True

View File

@ -0,0 +1,21 @@
# Generated by Django 2.1.5 on 2019-01-18 13:19
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('api', '0056_auto_20190114_0857'),
]
operations = [
migrations.RemoveField(
model_name='channel',
name='user',
),
migrations.RemoveField(
model_name='check',
name='user',
),
]

View File

@ -8,7 +8,6 @@ from datetime import datetime, timedelta as td
from croniter import croniter from croniter import croniter
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.urls import reverse from django.urls import reverse
from django.utils import timezone from django.utils import timezone
@ -67,7 +66,6 @@ class Check(models.Model):
tags = models.CharField(max_length=500, blank=True) tags = models.CharField(max_length=500, blank=True)
code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
desc = models.TextField(blank=True) desc = models.TextField(blank=True)
user = models.ForeignKey(User, models.CASCADE)
project = models.ForeignKey(Project, models.CASCADE) project = models.ForeignKey(Project, models.CASCADE)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
kind = models.CharField(max_length=10, default="simple", kind = models.CharField(max_length=10, default="simple",
@ -262,7 +260,6 @@ class Ping(models.Model):
class Channel(models.Model): class Channel(models.Model):
name = models.CharField(max_length=100, blank=True) name = models.CharField(max_length=100, blank=True)
code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True) code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
user = models.ForeignKey(User, models.CASCADE)
project = models.ForeignKey(Project, models.CASCADE) project = models.ForeignKey(Project, models.CASCADE)
created = models.DateTimeField(auto_now_add=True) created = models.DateTimeField(auto_now_add=True)
kind = models.CharField(max_length=20, choices=CHANNEL_KINDS) kind = models.CharField(max_length=20, choices=CHANNEL_KINDS)

View File

@ -6,8 +6,7 @@ class ApiAdminTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(ApiAdminTestCase, self).setUp() super(ApiAdminTestCase, self).setUp()
self.check = Check.objects.create(user=self.alice, tags="foo bar", self.check = Check.objects.create(project=self.project, tags="foo bar")
project=self.project)
self.alice.is_staff = True self.alice.is_staff = True
self.alice.is_superuser = True self.alice.is_superuser = True
@ -16,8 +15,8 @@ class ApiAdminTestCase(BaseTestCase):
def test_it_shows_channel_list_with_pushbullet(self): def test_it_shows_channel_list_with_pushbullet(self):
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")
Channel.objects.create(user=self.alice, kind="pushbullet", Channel.objects.create(project=self.project, kind="pushbullet",
value="test-token", project=self.project) value="test-token")
r = self.client.get("/admin/api/channel/") r = self.client.get("/admin/api/channel/")
self.assertContains(r, "Pushbullet") self.assertContains(r, "Pushbullet")
@ -25,8 +24,8 @@ class ApiAdminTestCase(BaseTestCase):
def test_it_shows_channel_list_with_unverified_email(self): def test_it_shows_channel_list_with_unverified_email(self):
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")
Channel.objects.create(user=self.alice, kind="email", Channel.objects.create(project=self.project, kind="email",
value="foo@example.org", project=self.project) value="foo@example.org")
r = self.client.get("/admin/api/channel/") r = self.client.get("/admin/api/channel/")
self.assertContains(r, "Email <i>(unconfirmed)</i>") self.assertContains(r, "Email <i>(unconfirmed)</i>")

View File

@ -12,8 +12,7 @@ class BadgeTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(BadgeTestCase, self).setUp() super(BadgeTestCase, self).setUp()
self.check = Check.objects.create(user=self.alice, project=self.project, self.check = Check.objects.create(project=self.project, tags="foo bar")
tags="foo bar")
sig = base64_hmac(str(self.project.badge_key), "foo", settings.SECRET_KEY) sig = base64_hmac(str(self.project.badge_key), "foo", settings.SECRET_KEY)
sig = sig[:8] sig = sig[:8]

View File

@ -9,11 +9,10 @@ class BounceTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(BounceTestCase, self).setUp() super(BounceTestCase, self).setUp()
self.check = Check(user=self.alice, status="up", project=self.project) self.check = Check(project=self.project, status="up")
self.check.save() self.check.save()
self.channel = Channel(user=self.alice, kind="email", self.channel = Channel(project=self.project, kind="email")
project=self.project)
self.channel.value = "alice@example.org" self.channel.value = "alice@example.org"
self.channel.email_verified = True self.channel.email_verified = True
self.channel.save() self.channel.save()

View File

@ -16,9 +16,7 @@ class ChannelModelTestCase(BaseTestCase):
"oauthSecret": "bar" "oauthSecret": "bar"
}) })
channel = Channel(kind="hipchat", user=self.alice, channel = Channel(kind="hipchat", project=self.project, value=value)
project=self.project, value=value)
channel.refresh_hipchat_access_token() channel.refresh_hipchat_access_token()
# It should request a token using a correct tokenUrl # It should request a token using a correct tokenUrl

View File

@ -155,7 +155,7 @@ class CheckModelTestCase(BaseTestCase):
dt = timezone.make_aware(datetime(2000, 1, 1), timezone=timezone.utc) dt = timezone.make_aware(datetime(2000, 1, 1), timezone=timezone.utc)
# Expect ping every round hour # Expect ping every round hour
check = Check(user=self.alice, project=self.project) check = Check(project=self.project)
check.kind = "cron" check.kind = "cron"
check.schedule = "0 * * * *" check.schedule = "0 * * * *"
check.status = "up" check.status = "up"

View File

@ -77,8 +77,7 @@ class CreateCheckTestCase(BaseTestCase):
self.assertEqual(r.status_code, 201) self.assertEqual(r.status_code, 201)
def test_it_assigns_channels(self): def test_it_assigns_channels(self):
channel = Channel(user=self.alice, project=self.project) channel = Channel.objects.create(project=self.project)
channel.save()
r = self.post({"api_key": "X" * 32, "channels": "*"}) r = self.post({"api_key": "X" * 32, "channels": "*"})
@ -87,8 +86,7 @@ class CreateCheckTestCase(BaseTestCase):
self.assertEqual(check.channel_set.get(), channel) self.assertEqual(check.channel_set.get(), channel)
def test_it_supports_unique(self): def test_it_supports_unique(self):
existing = Check(user=self.alice, name="Foo", project=self.project) Check.objects.create(project=self.project, name="Foo")
existing.save()
r = self.post({ r = self.post({
"api_key": "X" * 32, "api_key": "X" * 32,
@ -138,9 +136,6 @@ class CreateCheckTestCase(BaseTestCase):
expected_fragment="name is too long") expected_fragment="name is too long")
def test_unique_accepts_only_whitelisted_values(self): def test_unique_accepts_only_whitelisted_values(self):
existing = Check(user=self.alice, name="Foo", project=self.project)
existing.save()
self.post({ self.post({
"api_key": "X" * 32, "api_key": "X" * 32,
"name": "Foo", "name": "Foo",

View File

@ -6,8 +6,7 @@ class DeleteCheckTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(DeleteCheckTestCase, self).setUp() super(DeleteCheckTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
def test_it_works(self): def test_it_works(self):
r = self.client.delete("/api/v1/checks/%s" % self.check.code, r = self.client.delete("/api/v1/checks/%s" % self.check.code,

View File

@ -9,7 +9,7 @@ class ListChannelsTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(ListChannelsTestCase, self).setUp() super(ListChannelsTestCase, self).setUp()
self.c1 = Channel(user=self.alice, project=self.project) self.c1 = Channel(project=self.project)
self.c1.kind = "email" self.c1.kind = "email"
self.c1.name = "Email to Alice" self.c1.name = "Email to Alice"
self.c1.save() self.c1.save()
@ -36,8 +36,8 @@ class ListChannelsTestCase(BaseTestCase):
self.assertIn("GET", r["Access-Control-Allow-Methods"]) self.assertIn("GET", r["Access-Control-Allow-Methods"])
def test_it_shows_only_users_channels(self): def test_it_shows_only_users_channels(self):
Channel.objects.create(user=self.bob, kind="email", name="Bob", Channel.objects.create(project=self.bobs_project, kind="email",
project=self.bobs_project) name="Bob")
r = self.get() r = self.get()
data = r.json() data = r.json()

View File

@ -14,7 +14,7 @@ class ListChecksTestCase(BaseTestCase):
self.now = now().replace(microsecond=0) self.now = now().replace(microsecond=0)
self.a1 = Check(user=self.alice, name="Alice 1", project=self.project) self.a1 = Check(project=self.project, name="Alice 1")
self.a1.timeout = td(seconds=3600) self.a1.timeout = td(seconds=3600)
self.a1.grace = td(seconds=900) self.a1.grace = td(seconds=900)
self.a1.n_pings = 0 self.a1.n_pings = 0
@ -22,7 +22,7 @@ class ListChecksTestCase(BaseTestCase):
self.a1.tags = "a1-tag a1-additional-tag" self.a1.tags = "a1-tag a1-additional-tag"
self.a1.save() self.a1.save()
self.a2 = Check(user=self.alice, name="Alice 2", project=self.project) self.a2 = Check(project=self.project, name="Alice 2")
self.a2.timeout = td(seconds=86400) self.a2.timeout = td(seconds=86400)
self.a2.grace = td(seconds=3600) self.a2.grace = td(seconds=3600)
self.a2.last_ping = self.now self.a2.last_ping = self.now
@ -30,7 +30,7 @@ class ListChecksTestCase(BaseTestCase):
self.a2.tags = "a2-tag" self.a2.tags = "a2-tag"
self.a2.save() self.a2.save()
self.c1 = Channel.objects.create(user=self.alice, project=self.project) self.c1 = Channel.objects.create(project=self.project)
self.a1.channel_set.add(self.c1) self.a1.channel_set.add(self.c1)
def get(self): def get(self):
@ -79,9 +79,7 @@ class ListChecksTestCase(BaseTestCase):
self.assertIn("GET", r["Access-Control-Allow-Methods"]) self.assertIn("GET", r["Access-Control-Allow-Methods"])
def test_it_shows_only_users_checks(self): def test_it_shows_only_users_checks(self):
bobs_check = Check(user=self.bob, name="Bob 1", Check.objects.create(project=self.bobs_project, name="Bob 1")
project=self.bobs_project)
bobs_check.save()
r = self.get() r = self.get()
data = r.json() data = r.json()

View File

@ -16,11 +16,10 @@ class NotifyTestCase(BaseTestCase):
def _setup_data(self, kind, value, status="down", email_verified=True): def _setup_data(self, kind, value, status="down", email_verified=True):
self.check = Check(project=self.project) self.check = Check(project=self.project)
self.check.status = status self.check.status = status
self.check.user = self.alice
self.check.last_ping = now() - td(minutes=61) self.check.last_ping = now() - td(minutes=61)
self.check.save() self.check.save()
self.channel = Channel(user=self.alice, project=self.project) self.channel = Channel(project=self.project)
self.channel.kind = kind self.channel.kind = kind
self.channel.value = value self.channel.value = value
self.channel.email_verified = email_verified self.channel.email_verified = email_verified

View File

@ -8,8 +8,7 @@ from hc.test import BaseTestCase
class PauseTestCase(BaseTestCase): class PauseTestCase(BaseTestCase):
def test_it_works(self): def test_it_works(self):
check = Check(user=self.alice, status="up", project=self.project) check = Check.objects.create(project=self.project, status="up")
check.save()
url = "/api/v1/checks/%s/pause" % check.code url = "/api/v1/checks/%s/pause" % check.code
r = self.client.post(url, "", content_type="application/json", r = self.client.post(url, "", content_type="application/json",
@ -22,8 +21,7 @@ class PauseTestCase(BaseTestCase):
self.assertEqual(check.status, "paused") self.assertEqual(check.status, "paused")
def test_it_handles_options(self): def test_it_handles_options(self):
check = Check(user=self.alice, status="up", project=self.project) check = Check.objects.create(project=self.project, status="up")
check.save()
r = self.client.options("/api/v1/checks/%s/pause" % check.code) r = self.client.options("/api/v1/checks/%s/pause" % check.code)
self.assertEqual(r.status_code, 204) self.assertEqual(r.status_code, 204)
@ -36,8 +34,7 @@ class PauseTestCase(BaseTestCase):
self.assertEqual(r.status_code, 405) self.assertEqual(r.status_code, 405)
def test_it_validates_ownership(self): def test_it_validates_ownership(self):
check = Check(user=self.bob, status="up", project=self.bobs_project) check = Check.objects.create(project=self.bobs_project, status="up")
check.save()
url = "/api/v1/checks/%s/pause" % check.code url = "/api/v1/checks/%s/pause" % check.code
r = self.client.post(url, "", content_type="application/json", r = self.client.post(url, "", content_type="application/json",
@ -60,7 +57,7 @@ class PauseTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_clears_last_start_alert_after(self): def test_it_clears_last_start_alert_after(self):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
check.last_start = now() check.last_start = now()
check.alert_after = check.last_start + td(hours=1) check.alert_after = check.last_start + td(hours=1)
check.save() check.save()

View File

@ -10,8 +10,7 @@ class PingTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super().setUp() super().setUp()
self.check = Check.objects.create(user=self.alice, self.check = Check.objects.create(project=self.project)
project=self.project)
def test_it_works(self): def test_it_works(self):
r = self.client.get("/ping/%s/" % self.check.code) r = self.client.get("/ping/%s/" % self.check.code)

View File

@ -12,7 +12,7 @@ from hc.test import BaseTestCase
class SendAlertsTestCase(BaseTestCase): class SendAlertsTestCase(BaseTestCase):
def test_it_handles_grace_period(self): def test_it_handles_grace_period(self):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
# 1 day 30 minutes after ping the check is in grace period: # 1 day 30 minutes after ping the check is in grace period:
check.last_ping = now() - td(days=1, minutes=30) check.last_ping = now() - td(days=1, minutes=30)
check.alert_after = check.last_ping + td(days=1, hours=1) check.alert_after = check.last_ping + td(days=1, hours=1)
@ -25,7 +25,7 @@ class SendAlertsTestCase(BaseTestCase):
self.assertEqual(Flip.objects.count(), 0) self.assertEqual(Flip.objects.count(), 0)
def test_it_creates_a_flip_when_check_goes_down(self): def test_it_creates_a_flip_when_check_goes_down(self):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
check.last_ping = now() - td(days=2) check.last_ping = now() - td(days=2)
check.alert_after = check.last_ping + td(days=1, hours=1) check.alert_after = check.last_ping + td(days=1, hours=1)
check.save() check.save()
@ -48,7 +48,7 @@ class SendAlertsTestCase(BaseTestCase):
@patch("hc.api.management.commands.sendalerts.notify_on_thread") @patch("hc.api.management.commands.sendalerts.notify_on_thread")
def test_it_processes_flip(self, mock_notify): def test_it_processes_flip(self, mock_notify):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
check.last_ping = now() check.last_ping = now()
check.alert_after = check.last_ping + td(days=1, hours=1) check.alert_after = check.last_ping + td(days=1, hours=1)
check.save() check.save()
@ -72,7 +72,7 @@ class SendAlertsTestCase(BaseTestCase):
@patch("hc.api.management.commands.sendalerts.notify_on_thread") @patch("hc.api.management.commands.sendalerts.notify_on_thread")
def test_it_updates_alert_after(self, mock_notify): def test_it_updates_alert_after(self, mock_notify):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
check.last_ping = now() - td(hours=1) check.last_ping = now() - td(hours=1)
check.alert_after = check.last_ping check.alert_after = check.last_ping
check.save() check.save()
@ -92,7 +92,7 @@ class SendAlertsTestCase(BaseTestCase):
@patch("hc.api.management.commands.sendalerts.notify") @patch("hc.api.management.commands.sendalerts.notify")
def test_it_works_synchronously(self, mock_notify): def test_it_works_synchronously(self, mock_notify):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
check.last_ping = now() - td(days=2) check.last_ping = now() - td(days=2)
check.alert_after = check.last_ping + td(days=1, hours=1) check.alert_after = check.last_ping + td(days=1, hours=1)
check.save() check.save()
@ -107,7 +107,7 @@ class SendAlertsTestCase(BaseTestCase):
self.profile.nag_period = td(hours=1) self.profile.nag_period = td(hours=1)
self.profile.save() self.profile.save()
check = Check(user=self.alice, status="down", project=self.project) check = Check(project=self.project, status="down")
check.last_ping = now() - td(days=2) check.last_ping = now() - td(days=2)
check.save() check.save()
@ -125,7 +125,7 @@ class SendAlertsTestCase(BaseTestCase):
self.bobs_profile.nag_period = td(hours=1) self.bobs_profile.nag_period = td(hours=1)
self.bobs_profile.save() self.bobs_profile.save()
check = Check(user=self.alice, status="down", project=self.project) check = Check(project=self.project, status="down")
check.last_ping = now() - td(days=2) check.last_ping = now() - td(days=2)
check.save() check.save()
@ -145,7 +145,7 @@ class SendAlertsTestCase(BaseTestCase):
self.profile.next_nag_date = original_nag_date self.profile.next_nag_date = original_nag_date
self.profile.save() self.profile.save()
check = Check(user=self.alice, status="down", project=self.project) check = Check(project=self.project, status="down")
check.last_ping = now() - td(days=2) check.last_ping = now() - td(days=2)
check.save() check.save()

View File

@ -24,8 +24,7 @@ class SendAlertsTestCase(BaseTestCase):
self.profile.save() self.profile.save()
# And it needs at least one check that has been pinged. # And it needs at least one check that has been pinged.
self.check = Check(user=self.alice, last_ping=now()) self.check = Check(project=self.project, last_ping=now())
self.check.project = self.project
self.check.status = "down" self.check.status = "down"
self.check.save() self.check.save()

View File

@ -8,8 +8,7 @@ class UpdateCheckTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(UpdateCheckTestCase, self).setUp() super(UpdateCheckTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
def post(self, code, data): def post(self, code, data):
url = "/api/v1/checks/%s" % code url = "/api/v1/checks/%s" % code
@ -51,7 +50,7 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertIn("POST", r["Access-Control-Allow-Methods"]) self.assertIn("POST", r["Access-Control-Allow-Methods"])
def test_it_unassigns_channels(self): def test_it_unassigns_channels(self):
Channel.objects.create(user=self.alice, project=self.project) Channel.objects.create(project=self.project)
self.check.assign_all_channels() self.check.assign_all_channels()
r = self.post(self.check.code, { r = self.post(self.check.code, {
@ -78,8 +77,7 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_validates_ownership(self): def test_it_validates_ownership(self):
check = Check(user=self.bob, status="up", project=self.bobs_project) check = Check.objects.create(project=self.bobs_project, status="up")
check.save()
r = self.post(check.code, {"api_key": "X" * 32}) r = self.post(check.code, {"api_key": "X" * 32})
self.assertEqual(r.status_code, 403) self.assertEqual(r.status_code, 403)
@ -96,10 +94,10 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.kind, "simple") self.assertEqual(self.check.kind, "simple")
def test_it_sets_single_channel(self): def test_it_sets_single_channel(self):
channel = Channel.objects.create(user=self.alice, project=self.project) channel = Channel.objects.create(project=self.project)
# Create another channel so we can test that only the first one # Create another channel so we can test that only the first one
# gets assigned: # gets assigned:
Channel.objects.create(user=self.alice, project=self.project) Channel.objects.create(project=self.project)
r = self.post(self.check.code, { r = self.post(self.check.code, {
"api_key": "X" * 32, "api_key": "X" * 32,
@ -113,8 +111,8 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.channel_set.first().code, channel.code) self.assertEqual(self.check.channel_set.first().code, channel.code)
def test_it_handles_comma_separated_channel_codes(self): def test_it_handles_comma_separated_channel_codes(self):
c1 = Channel.objects.create(user=self.alice, project=self.project) c1 = Channel.objects.create(project=self.project)
c2 = Channel.objects.create(user=self.alice, project=self.project) c2 = Channel.objects.create(project=self.project)
r = self.post(self.check.code, { r = self.post(self.check.code, {
"api_key": "X" * 32, "api_key": "X" * 32,
"channels": "%s,%s" % (c1.code, c2.code) "channels": "%s,%s" % (c1.code, c2.code)
@ -126,8 +124,8 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.channel_set.count(), 2) self.assertEqual(self.check.channel_set.count(), 2)
def test_it_handles_asterix(self): def test_it_handles_asterix(self):
Channel.objects.create(user=self.alice, project=self.project) Channel.objects.create(project=self.project)
Channel.objects.create(user=self.alice, project=self.project) Channel.objects.create(project=self.project)
r = self.post(self.check.code, { r = self.post(self.check.code, {
"api_key": "X" * 32, "api_key": "X" * 32,
"channels": "*" "channels": "*"
@ -139,7 +137,7 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.channel_set.count(), 2) self.assertEqual(self.check.channel_set.count(), 2)
def test_it_ignores_channels_if_channels_key_missing(self): def test_it_ignores_channels_if_channels_key_missing(self):
Channel.objects.create(user=self.alice, project=self.project) Channel.objects.create(project=self.project)
self.check.assign_all_channels() self.check.assign_all_channels()
r = self.post(self.check.code, {"api_key": "X" * 32}) r = self.post(self.check.code, {"api_key": "X" * 32})

View File

@ -131,7 +131,7 @@ def create_check(request):
if request.project.num_checks_available() <= 0: if request.project.num_checks_available() <= 0:
return HttpResponseForbidden() return HttpResponseForbidden()
check = Check(user=request.project.owner, project=request.project) check = Check(project=request.project)
created = True created = True
_update(check, request.json) _update(check, request.json)

View File

@ -30,7 +30,7 @@ class AddCheckTestCase(BaseTestCase):
check = Check.objects.get() check = Check.objects.get()
# Added by bob, but should belong to alice (bob has team access) # Added by bob, but should belong to alice (bob has team access)
self.assertEqual(check.user, self.alice) self.assertEqual(check.project, self.project)
def test_it_rejects_get(self): def test_it_rejects_get(self):
url = "/checks/add/" url = "/checks/add/"

View File

@ -31,7 +31,7 @@ class AddPdTestCase(BaseTestCase):
ch = Channel.objects.get() ch = Channel.objects.get()
# Added by bob, but should belong to alice (bob has team access) # Added by bob, but should belong to alice (bob has team access)
self.assertEqual(ch.user, self.alice) self.assertEqual(ch.project, self.project)
def test_it_rejects_bad_email(self): def test_it_rejects_bad_email(self):
form = {"value": "not an email address"} form = {"value": "not an email address"}

View File

@ -30,5 +30,4 @@ class AddPagerTreeTestCase(BaseTestCase):
c = Channel.objects.get() c = Channel.objects.get()
self.assertEqual(c.kind, "trello") self.assertEqual(c.kind, "trello")
self.assertEqual(c.trello_token, "fake-token") self.assertEqual(c.trello_token, "fake-token")
self.assertEqual(c.user, self.alice)
self.assertEqual(c.project, self.project) self.assertEqual(c.project, self.project)

View File

@ -30,7 +30,7 @@ class AddWebhookTestCase(BaseTestCase):
self.client.post(self.url, form) self.client.post(self.url, form)
c = Channel.objects.get() c = Channel.objects.get()
self.assertEqual(c.user, self.alice) self.assertEqual(c.project, self.project)
self.assertEqual(c.value, '{"headers": {}, "post_data": "", "url_down": "http://foo.com", "url_up": "https://bar.com"}') self.assertEqual(c.value, '{"headers": {}, "post_data": "", "url_down": "http://foo.com", "url_up": "https://bar.com"}')
def test_it_rejects_bad_urls(self): def test_it_rejects_bad_urls(self):

View File

@ -6,8 +6,7 @@ class ChannelChecksTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(ChannelChecksTestCase, self).setUp() super(ChannelChecksTestCase, self).setUp()
self.channel = Channel(user=self.alice, kind="email") self.channel = Channel(project=self.project, kind="email")
self.channel.project = self.project
self.channel.value = "alice@example.org" self.channel.value = "alice@example.org"
self.channel.save() self.channel.save()

View File

@ -7,7 +7,7 @@ from hc.test import BaseTestCase
class ChannelsTestCase(BaseTestCase): class ChannelsTestCase(BaseTestCase):
def test_it_formats_complex_slack_value(self): def test_it_formats_complex_slack_value(self):
ch = Channel(kind="slack", user=self.alice, project=self.project) ch = Channel(kind="slack", project=self.project)
ch.value = json.dumps({ ch.value = json.dumps({
"ok": True, "ok": True,
"team_name": "foo-team", "team_name": "foo-team",
@ -24,7 +24,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "#bar") self.assertContains(r, "#bar")
def test_it_shows_webhook_post_data(self): def test_it_shows_webhook_post_data(self):
ch = Channel(kind="webhook", user=self.alice, project=self.project) ch = Channel(kind="webhook", project=self.project)
ch.value = "http://down.example.com\nhttp://up.example.com\nfoobar" ch.value = "http://down.example.com\nhttp://up.example.com\nfoobar"
ch.save() ch.save()
@ -38,7 +38,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "foobar") self.assertContains(r, "foobar")
def test_it_shows_pushover_details(self): def test_it_shows_pushover_details(self):
ch = Channel(kind="po", user=self.alice, project=self.project) ch = Channel(kind="po", project=self.project)
ch.value = "fake-key|0" ch.value = "fake-key|0"
ch.save() ch.save()
@ -49,10 +49,10 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "(normal priority)") self.assertContains(r, "(normal priority)")
def test_it_shows_disabled_email(self): def test_it_shows_disabled_email(self):
check = Check(user=self.alice, status="up", project=self.project) check = Check(project=self.project, status="up")
check.save() check.save()
channel = Channel(user=self.alice, kind="email", project=self.project) channel = Channel(project=self.project, kind="email")
channel.value = "alice@example.org" channel.value = "alice@example.org"
channel.save() channel.save()
@ -65,7 +65,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "Disabled") self.assertContains(r, "Disabled")
def test_it_shows_unconfirmed_email(self): def test_it_shows_unconfirmed_email(self):
channel = Channel(user=self.alice, kind="email", project=self.project) channel = Channel(project=self.project, kind="email")
channel.value = "alice@example.org" channel.value = "alice@example.org"
channel.save() channel.save()
@ -75,7 +75,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "Unconfirmed") self.assertContains(r, "Unconfirmed")
def test_it_shows_sms_label(self): def test_it_shows_sms_label(self):
ch = Channel(kind="sms", user=self.alice, project=self.project) ch = Channel(kind="sms", project=self.project)
ch.value = json.dumps({"value": "+123", "label": "My Phone"}) ch.value = json.dumps({"value": "+123", "label": "My Phone"})
ch.save() ch.save()

View File

@ -6,11 +6,9 @@ class DetailsTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(DetailsTestCase, self).setUp() super(DetailsTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
ping = Ping(owner=self.check) ping = Ping.objects.create(owner=self.check)
ping.save()
# Older MySQL versions don't store microseconds. This makes sure # Older MySQL versions don't store microseconds. This makes sure
# the ping is older than any notifications we may create later: # the ping is older than any notifications we may create later:

View File

@ -6,11 +6,9 @@ class LogTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(LogTestCase, self).setUp() super(LogTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
ping = Ping(owner=self.check) ping = Ping.objects.create(owner=self.check)
ping.save()
# Older MySQL versions don't store microseconds. This makes sure # Older MySQL versions don't store microseconds. This makes sure
# the ping is older than any notifications we may create later: # the ping is older than any notifications we may create later:
@ -55,8 +53,7 @@ class LogTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404) self.assertEqual(r.status_code, 404)
def test_it_shows_pushover_notifications(self): def test_it_shows_pushover_notifications(self):
ch = Channel(kind="po", user=self.alice, project=self.project) ch = Channel.objects.create(kind="po", project=self.project)
ch.save()
Notification(owner=self.check, channel=ch, check_status="down").save() Notification(owner=self.check, channel=ch, check_status="down").save()
@ -67,8 +64,8 @@ class LogTestCase(BaseTestCase):
self.assertContains(r, "Sent a Pushover notification", status_code=200) self.assertContains(r, "Sent a Pushover notification", status_code=200)
def test_it_shows_webhook_notifications(self): def test_it_shows_webhook_notifications(self):
ch = Channel(kind="webhook", user=self.alice, value="foo/$NAME") ch = Channel(kind="webhook", project=self.project)
ch.project = self.project ch.value = "foo/$NAME"
ch.save() ch.save()
Notification(owner=self.check, channel=ch, check_status="down").save() Notification(owner=self.check, channel=ch, check_status="down").save()

View File

@ -8,8 +8,7 @@ class MyChecksTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(MyChecksTestCase, self).setUp() super(MyChecksTestCase, self).setUp()
self.check = Check(user=self.alice, name="Alice Was Here") self.check = Check(project=self.project, name="Alice Was Here")
self.check.project = self.project
self.check.save() self.check.save()
def test_it_works(self): def test_it_works(self):

View File

@ -9,9 +9,7 @@ class PauseTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(PauseTestCase, self).setUp() super(PauseTestCase, self).setUp()
self.check = Check(user=self.alice, status="up", project=self.project) self.check = Check.objects.create(project=self.project, status="up")
self.check.save()
self.url = "/checks/%s/pause/" % self.check.code self.url = "/checks/%s/pause/" % self.check.code
def test_it_pauses(self): def test_it_pauses(self):

View File

@ -5,9 +5,7 @@ from hc.test import BaseTestCase
class LastPingTestCase(BaseTestCase): class LastPingTestCase(BaseTestCase):
def test_it_works(self): def test_it_works(self):
check = Check(user=self.alice, project=self.project) check = Check.objects.create(project=self.project)
check.save()
Ping.objects.create(owner=check, body="this is body") Ping.objects.create(owner=check, body="this is body")
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")
@ -15,9 +13,7 @@ class LastPingTestCase(BaseTestCase):
self.assertContains(r, "this is body", status_code=200) self.assertContains(r, "this is body", status_code=200)
def test_it_shows_fail(self): def test_it_shows_fail(self):
check = Check(user=self.alice, project=self.project) check = Check.objects.create(project=self.project)
check.save()
Ping.objects.create(owner=check, kind="fail") Ping.objects.create(owner=check, kind="fail")
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")
@ -25,9 +21,7 @@ class LastPingTestCase(BaseTestCase):
self.assertContains(r, "/fail", status_code=200) self.assertContains(r, "/fail", status_code=200)
def test_it_shows_start(self): def test_it_shows_start(self):
check = Check(user=self.alice, project=self.project) check = Check.objects.create(project=self.project)
check.save()
Ping.objects.create(owner=check, kind="start") Ping.objects.create(owner=check, kind="start")
self.client.login(username="alice@example.org", password="password") self.client.login(username="alice@example.org", password="password")
@ -35,8 +29,7 @@ class LastPingTestCase(BaseTestCase):
self.assertContains(r, "/start", status_code=200) self.assertContains(r, "/start", status_code=200)
def test_it_accepts_n(self): def test_it_accepts_n(self):
check = Check(user=self.alice, project=self.project) check = Check.objects.create(project=self.project)
check.save()
# remote_addr, scheme, method, ua, body: # remote_addr, scheme, method, ua, body:
check.ping("1.2.3.4", "http", "post", "tester", "foo-123", "success") check.ping("1.2.3.4", "http", "post", "tester", "foo-123", "success")
@ -54,9 +47,7 @@ class LastPingTestCase(BaseTestCase):
self.bobs_profile.current_team = None self.bobs_profile.current_team = None
self.bobs_profile.save() self.bobs_profile.save()
check = Check(user=self.alice, project=self.project) check = Check.objects.create(project=self.project)
check.save()
Ping.objects.create(owner=check, body="this is body") Ping.objects.create(owner=check, body="this is body")
self.client.login(username="bob@example.org", password="password") self.client.login(username="bob@example.org", password="password")

View File

@ -6,8 +6,7 @@ class RemoveChannelTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(RemoveChannelTestCase, self).setUp() super(RemoveChannelTestCase, self).setUp()
self.channel = Channel(user=self.alice, kind="email") self.channel = Channel(project=self.project, kind="email")
self.channel.project = self.project
self.channel.value = "alice@example.org" self.channel.value = "alice@example.org"
self.channel.save() self.channel.save()

View File

@ -6,9 +6,7 @@ class RemoveCheckTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(RemoveCheckTestCase, self).setUp() super(RemoveCheckTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
self.remove_url = "/checks/%s/remove/" % self.check.code self.remove_url = "/checks/%s/remove/" % self.check.code
def test_it_works(self): def test_it_works(self):

View File

@ -6,8 +6,7 @@ class MyChecksTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(MyChecksTestCase, self).setUp() super(MyChecksTestCase, self).setUp()
self.check = Check(user=self.alice, name="Alice Was Here") self.check = Check(project=self.project, name="Alice Was Here")
self.check.project = self.project
self.check.tags = "foo" self.check.tags = "foo"
self.check.save() self.check.save()

View File

@ -6,8 +6,7 @@ class StatusSingleTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(StatusSingleTestCase, self).setUp() super(StatusSingleTestCase, self).setUp()
self.check = Check(user=self.alice, name="Alice Was Here") self.check = Check(project=self.project, name="Alice Was Here")
self.check.project = self.project
self.check.save() self.check.save()
def test_it_works(self): def test_it_works(self):

View File

@ -7,11 +7,9 @@ class SwitchChannelTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(SwitchChannelTestCase, self).setUp() super(SwitchChannelTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
self.channel = Channel(user=self.alice, kind="email") self.channel = Channel(project=self.project, kind="email")
self.channel.project = self.project
self.channel.value = "alice@example.org" self.channel.value = "alice@example.org"
self.channel.save() self.channel.save()
@ -38,8 +36,7 @@ class SwitchChannelTestCase(BaseTestCase):
def test_it_checks_channels_ownership(self): def test_it_checks_channels_ownership(self):
charlies_project = Project.objects.create(owner=self.charlie) charlies_project = Project.objects.create(owner=self.charlie)
cc = Check(user=self.charlie, project=charlies_project) cc = Check.objects.create(project=charlies_project)
cc.save()
# Charlie will try to assign Alice's channel to his check: # Charlie will try to assign Alice's channel to his check:
self.url = "/checks/%s/channels/%s/enabled" % (cc.code, self.channel.code) self.url = "/checks/%s/channels/%s/enabled" % (cc.code, self.channel.code)

View File

@ -6,8 +6,7 @@ class UnsubscribeEmailTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(UnsubscribeEmailTestCase, self).setUp() super(UnsubscribeEmailTestCase, self).setUp()
self.channel = Channel(user=self.alice, kind="email") self.channel = Channel(project=self.project, kind="email")
self.channel.project = self.project
self.channel.value = "alice@example.org" self.channel.value = "alice@example.org"
self.channel.save() self.channel.save()

View File

@ -7,11 +7,9 @@ class UpdateChannelTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(UpdateChannelTestCase, self).setUp() super(UpdateChannelTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
self.channel = Channel(user=self.alice, kind="email") self.channel = Channel(project=self.project, kind="email")
self.channel.project = self.project
self.channel.email = "alice@example.org" self.channel.email = "alice@example.org"
self.channel.save() self.channel.save()
@ -53,8 +51,7 @@ class UpdateChannelTestCase(BaseTestCase):
def test_it_checks_check_user(self): def test_it_checks_check_user(self):
charlies_project = Project.objects.create(owner=self.charlie) charlies_project = Project.objects.create(owner=self.charlie)
charlies_channel = Channel(user=self.charlie, kind="email") charlies_channel = Channel(project=charlies_project, kind="email")
charlies_channel.project = charlies_project
charlies_channel.email = "charlie@example.org" charlies_channel.email = "charlie@example.org"
charlies_channel.save() charlies_channel.save()

View File

@ -6,8 +6,7 @@ class UpdateChannelNameTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(UpdateChannelNameTestCase, self).setUp() super(UpdateChannelNameTestCase, self).setUp()
self.channel = Channel(kind="email", user=self.alice) self.channel = Channel(kind="email", project=self.project)
self.channel.project = self.project
self.channel.save() self.channel.save()
self.url = "/integrations/%s/name/" % self.channel.code self.url = "/integrations/%s/name/" % self.channel.code

View File

@ -6,8 +6,7 @@ class UpdateNameTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(UpdateNameTestCase, self).setUp() super(UpdateNameTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project) self.check = Check.objects.create(project=self.project)
self.check.save()
self.url = "/checks/%s/name/" % self.check.code self.url = "/checks/%s/name/" % self.check.code

View File

@ -9,7 +9,7 @@ class UpdateTimeoutTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(UpdateTimeoutTestCase, self).setUp() super(UpdateTimeoutTestCase, self).setUp()
self.check = Check(user=self.alice, status="up", project=self.project) self.check = Check(project=self.project, status="up")
self.check.last_ping = timezone.now() self.check.last_ping = timezone.now()
self.check.save() self.check.save()

View File

@ -6,8 +6,7 @@ class VerifyEmailTestCase(BaseTestCase):
def setUp(self): def setUp(self):
super(VerifyEmailTestCase, self).setUp() super(VerifyEmailTestCase, self).setUp()
self.channel = Channel(user=self.alice, kind="email") self.channel = Channel(project=self.project, kind="email")
self.channel.project = self.project
self.channel.value = "alice@example.org" self.channel.value = "alice@example.org"
self.channel.save() self.channel.save()

View File

@ -249,7 +249,7 @@ def add_check(request):
if request.project.num_checks_available() <= 0: if request.project.num_checks_available() <= 0:
return HttpResponseBadRequest() return HttpResponseBadRequest()
check = Check(user=request.project.owner, project=request.project) check = Check(project=request.project)
check.save() check.save()
check.assign_all_channels() check.assign_all_channels()
@ -588,8 +588,7 @@ def add_email(request):
if request.method == "POST": if request.method == "POST":
form = AddEmailForm(request.POST) form = AddEmailForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="email") channel = Channel(project=request.project, kind="email")
channel.project = request.project
channel.value = form.cleaned_data["value"] channel.value = form.cleaned_data["value"]
channel.save() channel.save()
@ -608,8 +607,7 @@ def add_webhook(request):
if request.method == "POST": if request.method == "POST":
form = AddWebhookForm(request.POST) form = AddWebhookForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="webhook") channel = Channel(project=request.project, kind="webhook")
channel.project = request.project
channel.value = form.get_value() channel.value = form.get_value()
channel.save() channel.save()
@ -687,8 +685,7 @@ def add_pagertree(request):
if request.method == "POST": if request.method == "POST":
form = AddUrlForm(request.POST) form = AddUrlForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="pagertree") channel = Channel(project=request.project, kind="pagertree")
channel.project = request.project
channel.value = form.cleaned_data["value"] channel.value = form.cleaned_data["value"]
channel.save() channel.save()
@ -708,8 +705,7 @@ def add_slack(request):
if request.method == "POST": if request.method == "POST":
form = AddUrlForm(request.POST) form = AddUrlForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="slack") channel = Channel(project=request.project, kind="slack")
channel.project = request.project
channel.value = form.cleaned_data["value"] channel.value = form.cleaned_data["value"]
channel.save() channel.save()
@ -929,13 +925,12 @@ def add_pushover(request):
return HttpResponseBadRequest() return HttpResponseBadRequest()
if request.GET.get("pushover_unsubscribed") == "1": if request.GET.get("pushover_unsubscribed") == "1":
# Unsubscription: delete all Pushover channels for this user # Unsubscription: delete all Pushover channels for this project
Channel.objects.filter(user=request.user, kind="po").delete() Channel.objects.filter(project=request.project, kind="po").delete()
return redirect("hc-channels") return redirect("hc-channels")
# Subscription # Subscription
channel = Channel(user=request.project.owner, kind="po") channel = Channel(project=request.project, kind="po")
channel.project = request.project
channel.value = "%s|%s|%s" % (key, prio, prio_up) channel.value = "%s|%s|%s" % (key, prio, prio_up)
channel.save() channel.save()
channel.assign_all_checks() channel.assign_all_checks()
@ -957,8 +952,7 @@ def add_opsgenie(request):
if request.method == "POST": if request.method == "POST":
form = AddOpsGenieForm(request.POST) form = AddOpsGenieForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="opsgenie") channel = Channel(project=request.project, kind="opsgenie")
channel.project = request.project
channel.value = form.cleaned_data["value"] channel.value = form.cleaned_data["value"]
channel.save() channel.save()
@ -976,8 +970,7 @@ def add_victorops(request):
if request.method == "POST": if request.method == "POST":
form = AddUrlForm(request.POST) form = AddUrlForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="victorops") channel = Channel(project=request.project, kind="victorops")
channel.project = request.project
channel.value = form.cleaned_data["value"] channel.value = form.cleaned_data["value"]
channel.save() channel.save()
@ -1025,8 +1018,7 @@ def add_telegram(request):
chat_id, chat_type, chat_name = signing.loads(qs, max_age=600) chat_id, chat_type, chat_name = signing.loads(qs, max_age=600)
if request.method == "POST": if request.method == "POST":
channel = Channel(user=request.project.owner, kind="telegram") channel = Channel(project=request.project, kind="telegram")
channel.project = request.project
channel.value = json.dumps({ channel.value = json.dumps({
"id": chat_id, "id": chat_id,
"type": chat_type, "type": chat_type,
@ -1056,8 +1048,7 @@ def add_sms(request):
if request.method == "POST": if request.method == "POST":
form = AddSmsForm(request.POST) form = AddSmsForm(request.POST)
if form.is_valid(): if form.is_valid():
channel = Channel(user=request.project.owner, kind="sms") channel = Channel(project=request.project, kind="sms")
channel.project = request.project
channel.name = form.cleaned_data["label"] channel.name = form.cleaned_data["label"]
channel.value = json.dumps({ channel.value = json.dumps({
"value": form.cleaned_data["value"] "value": form.cleaned_data["value"]
@ -1083,8 +1074,7 @@ def add_trello(request):
raise Http404("trello integration is not available") raise Http404("trello integration is not available")
if request.method == "POST": if request.method == "POST":
channel = Channel(user=request.project.owner, kind="trello") channel = Channel(project=request.project, kind="trello")
channel.project = request.project
channel.value = request.POST["settings"] channel.value = request.POST["settings"]
channel.save() channel.save()