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):
self.client.login(username="alice@example.org", password="password")
Check.objects.create(user=self.alice, tags="foo a-B_1 baz@",
project=self.project)
Check.objects.create(user=self.bob, tags="bobs-tag",
project=self.bobs_project)
Check.objects.create(project=self.project, tags="foo a-B_1 baz@")
Check.objects.create(project=self.bobs_project, tags="bobs-tag")
r = self.client.get("/accounts/profile/badges/")
self.assertContains(r, "foo.svg")

View File

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

View File

@ -53,7 +53,7 @@ class LoginTestCase(BaseTestCase):
self.assertRedirects(r, "/checks/")
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 = {
"action": "login",

View File

@ -67,7 +67,7 @@ class ProfileTestCase(BaseTestCase):
self.assertEqual(self.project.api_key_readonly, "")
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.save()
@ -82,7 +82,7 @@ class ProfileTestCase(BaseTestCase):
self.assertIn("Test Check", message.body)
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()
sent = self.profile.send_report()
@ -91,7 +91,7 @@ class ProfileTestCase(BaseTestCase):
self.assertEqual(len(mail.outbox), 0)
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.save()
@ -101,7 +101,7 @@ class ProfileTestCase(BaseTestCase):
self.assertEqual(len(mail.outbox), 0)
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.last_ping = now()
check.save()
@ -120,7 +120,7 @@ class ProfileTestCase(BaseTestCase):
self.assertIn("Test Check", message.body)
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.save()

View File

@ -7,10 +7,10 @@ class ProjectModelTestCase(BaseTestCase):
def test_num_checks_available_handles_multiple_projects(self):
# 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:
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)

View File

@ -16,15 +16,14 @@ class PruneUsersTestCase(BaseTestCase):
self.charlie.save()
# Charlie has one demo check
project =Project.objects.create(owner=self.charlie)
Check(user=self.charlie, project=project).save()
charlies_project = Project.objects.create(owner=self.charlie)
Check(project=charlies_project).save()
Command().handle()
self.assertEqual(User.objects.filter(username="charlie").count(), 0)
self.assertEqual(Check.objects.count(), 0)
def test_it_leaves_team_members_alone(self):
self.bob.date_joined = 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.save()
c = Check(user=self.alice, name="This belongs to Alice",
project=self.project)
c = Check(project=self.project, name="This belongs to Alice")
c.save()
self.client.login(username="bob@example.org", password="password")

View File

@ -58,11 +58,11 @@ def _make_user(email):
profile.current_project = project
profile.save()
check = Check(user=user, project=project)
check = Check(project=project)
check.name = "My First Check"
check.save()
channel = Channel(user=user, project=project)
channel = Channel(project=project)
channel.kind = "email"
channel.value = email
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 django.conf import settings
from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
from django.utils import timezone
@ -67,7 +66,6 @@ class Check(models.Model):
tags = models.CharField(max_length=500, blank=True)
code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
desc = models.TextField(blank=True)
user = models.ForeignKey(User, models.CASCADE)
project = models.ForeignKey(Project, models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
kind = models.CharField(max_length=10, default="simple",
@ -262,7 +260,6 @@ class Ping(models.Model):
class Channel(models.Model):
name = models.CharField(max_length=100, blank=True)
code = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
user = models.ForeignKey(User, models.CASCADE)
project = models.ForeignKey(Project, models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
kind = models.CharField(max_length=20, choices=CHANNEL_KINDS)

View File

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

View File

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

View File

@ -9,11 +9,10 @@ class BounceTestCase(BaseTestCase):
def setUp(self):
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.channel = Channel(user=self.alice, kind="email",
project=self.project)
self.channel = Channel(project=self.project, kind="email")
self.channel.value = "alice@example.org"
self.channel.email_verified = True
self.channel.save()

View File

@ -16,9 +16,7 @@ class ChannelModelTestCase(BaseTestCase):
"oauthSecret": "bar"
})
channel = Channel(kind="hipchat", user=self.alice,
project=self.project, value=value)
channel = Channel(kind="hipchat", project=self.project, value=value)
channel.refresh_hipchat_access_token()
# 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)
# Expect ping every round hour
check = Check(user=self.alice, project=self.project)
check = Check(project=self.project)
check.kind = "cron"
check.schedule = "0 * * * *"
check.status = "up"

View File

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

View File

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

View File

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

View File

@ -14,7 +14,7 @@ class ListChecksTestCase(BaseTestCase):
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.grace = td(seconds=900)
self.a1.n_pings = 0
@ -22,7 +22,7 @@ class ListChecksTestCase(BaseTestCase):
self.a1.tags = "a1-tag a1-additional-tag"
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.grace = td(seconds=3600)
self.a2.last_ping = self.now
@ -30,7 +30,7 @@ class ListChecksTestCase(BaseTestCase):
self.a2.tags = "a2-tag"
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)
def get(self):
@ -79,9 +79,7 @@ class ListChecksTestCase(BaseTestCase):
self.assertIn("GET", r["Access-Control-Allow-Methods"])
def test_it_shows_only_users_checks(self):
bobs_check = Check(user=self.bob, name="Bob 1",
project=self.bobs_project)
bobs_check.save()
Check.objects.create(project=self.bobs_project, name="Bob 1")
r = self.get()
data = r.json()

View File

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

View File

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

View File

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

View File

@ -12,7 +12,7 @@ from hc.test import BaseTestCase
class SendAlertsTestCase(BaseTestCase):
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:
check.last_ping = now() - td(days=1, minutes=30)
check.alert_after = check.last_ping + td(days=1, hours=1)
@ -25,7 +25,7 @@ class SendAlertsTestCase(BaseTestCase):
self.assertEqual(Flip.objects.count(), 0)
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.alert_after = check.last_ping + td(days=1, hours=1)
check.save()
@ -48,7 +48,7 @@ class SendAlertsTestCase(BaseTestCase):
@patch("hc.api.management.commands.sendalerts.notify_on_thread")
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.alert_after = check.last_ping + td(days=1, hours=1)
check.save()
@ -72,7 +72,7 @@ class SendAlertsTestCase(BaseTestCase):
@patch("hc.api.management.commands.sendalerts.notify_on_thread")
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.alert_after = check.last_ping
check.save()
@ -92,7 +92,7 @@ class SendAlertsTestCase(BaseTestCase):
@patch("hc.api.management.commands.sendalerts.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.alert_after = check.last_ping + td(days=1, hours=1)
check.save()
@ -107,7 +107,7 @@ class SendAlertsTestCase(BaseTestCase):
self.profile.nag_period = td(hours=1)
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.save()
@ -125,7 +125,7 @@ class SendAlertsTestCase(BaseTestCase):
self.bobs_profile.nag_period = td(hours=1)
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.save()
@ -145,7 +145,7 @@ class SendAlertsTestCase(BaseTestCase):
self.profile.next_nag_date = original_nag_date
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.save()

View File

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

View File

@ -8,8 +8,7 @@ class UpdateCheckTestCase(BaseTestCase):
def setUp(self):
super(UpdateCheckTestCase, self).setUp()
self.check = Check(user=self.alice, project=self.project)
self.check.save()
self.check = Check.objects.create(project=self.project)
def post(self, code, data):
url = "/api/v1/checks/%s" % code
@ -51,7 +50,7 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertIn("POST", r["Access-Control-Allow-Methods"])
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()
r = self.post(self.check.code, {
@ -78,8 +77,7 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(r.status_code, 404)
def test_it_validates_ownership(self):
check = Check(user=self.bob, status="up", project=self.bobs_project)
check.save()
check = Check.objects.create(project=self.bobs_project, status="up")
r = self.post(check.code, {"api_key": "X" * 32})
self.assertEqual(r.status_code, 403)
@ -96,10 +94,10 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.kind, "simple")
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
# gets assigned:
Channel.objects.create(user=self.alice, project=self.project)
Channel.objects.create(project=self.project)
r = self.post(self.check.code, {
"api_key": "X" * 32,
@ -113,8 +111,8 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.channel_set.first().code, channel.code)
def test_it_handles_comma_separated_channel_codes(self):
c1 = Channel.objects.create(user=self.alice, project=self.project)
c2 = Channel.objects.create(user=self.alice, project=self.project)
c1 = Channel.objects.create(project=self.project)
c2 = Channel.objects.create(project=self.project)
r = self.post(self.check.code, {
"api_key": "X" * 32,
"channels": "%s,%s" % (c1.code, c2.code)
@ -126,8 +124,8 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.channel_set.count(), 2)
def test_it_handles_asterix(self):
Channel.objects.create(user=self.alice, project=self.project)
Channel.objects.create(user=self.alice, project=self.project)
Channel.objects.create(project=self.project)
Channel.objects.create(project=self.project)
r = self.post(self.check.code, {
"api_key": "X" * 32,
"channels": "*"
@ -139,7 +137,7 @@ class UpdateCheckTestCase(BaseTestCase):
self.assertEqual(self.check.channel_set.count(), 2)
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()
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:
return HttpResponseForbidden()
check = Check(user=request.project.owner, project=request.project)
check = Check(project=request.project)
created = True
_update(check, request.json)

View File

@ -30,7 +30,7 @@ class AddCheckTestCase(BaseTestCase):
check = Check.objects.get()
# 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):
url = "/checks/add/"

View File

@ -31,7 +31,7 @@ class AddPdTestCase(BaseTestCase):
ch = Channel.objects.get()
# 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):
form = {"value": "not an email address"}

View File

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

View File

@ -30,7 +30,7 @@ class AddWebhookTestCase(BaseTestCase):
self.client.post(self.url, form)
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"}')
def test_it_rejects_bad_urls(self):

View File

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

View File

@ -7,7 +7,7 @@ from hc.test import BaseTestCase
class ChannelsTestCase(BaseTestCase):
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({
"ok": True,
"team_name": "foo-team",
@ -24,7 +24,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "#bar")
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.save()
@ -38,7 +38,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "foobar")
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.save()
@ -49,10 +49,10 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "(normal priority)")
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()
channel = Channel(user=self.alice, kind="email", project=self.project)
channel = Channel(project=self.project, kind="email")
channel.value = "alice@example.org"
channel.save()
@ -65,7 +65,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "Disabled")
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.save()
@ -75,7 +75,7 @@ class ChannelsTestCase(BaseTestCase):
self.assertContains(r, "Unconfirmed")
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.save()

View File

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

View File

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

View File

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

View File

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

View File

@ -5,9 +5,7 @@ from hc.test import BaseTestCase
class LastPingTestCase(BaseTestCase):
def test_it_works(self):
check = Check(user=self.alice, project=self.project)
check.save()
check = Check.objects.create(project=self.project)
Ping.objects.create(owner=check, body="this is body")
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)
def test_it_shows_fail(self):
check = Check(user=self.alice, project=self.project)
check.save()
check = Check.objects.create(project=self.project)
Ping.objects.create(owner=check, kind="fail")
self.client.login(username="alice@example.org", password="password")
@ -25,9 +21,7 @@ class LastPingTestCase(BaseTestCase):
self.assertContains(r, "/fail", status_code=200)
def test_it_shows_start(self):
check = Check(user=self.alice, project=self.project)
check.save()
check = Check.objects.create(project=self.project)
Ping.objects.create(owner=check, kind="start")
self.client.login(username="alice@example.org", password="password")
@ -35,8 +29,7 @@ class LastPingTestCase(BaseTestCase):
self.assertContains(r, "/start", status_code=200)
def test_it_accepts_n(self):
check = Check(user=self.alice, project=self.project)
check.save()
check = Check.objects.create(project=self.project)
# remote_addr, scheme, method, ua, body:
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.save()
check = Check(user=self.alice, project=self.project)
check.save()
check = Check.objects.create(project=self.project)
Ping.objects.create(owner=check, body="this is body")
self.client.login(username="bob@example.org", password="password")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -9,7 +9,7 @@ class UpdateTimeoutTestCase(BaseTestCase):
def setUp(self):
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.save()

View File

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

View File

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