Exemplo n.º 1
0
 def testBadgeAwarded(self):
   """Tests that badge awarded works for a user."""
   from components.makahiki_badges.user_badges import DailyVisitorBadge
   badges.register(DailyVisitorBadge)
   
   profile = self.user.get_profile()
   self.assertFalse(badge_awarded(self.user, "dailyvisitor"), "New user should not be awarded the daily visitor badge.")
   
   # Test as a quest unlock condition.
   self.quest.unlock_conditions = "badge_awarded('dailyvisitor')"
   self.quest.save()
   self.assertTrue(self.quest not in get_quests(self.user), "User should not be able to participate in this quest.")
   
   self.quest.unlock_conditions = "not badge_awarded('dailyvisitor')"
   self.quest.save()
   self.assertTrue(self.quest in get_quests(self.user)["available_quests"], "User should be able to participate in this quest.")
   
   self.quest.accept(self.user)
   self.quest.completion_conditions = "badge_awarded('dailyvisitor')"
   self.quest.save()
   self.assertTrue(self.quest not in possibly_completed_quests(self.user), "User should not be able to complete this quest.")
   
   profile.daily_visit_count = 3
   profile.save()
   badges.possibly_award_badge("dailyvisitor", user=self.user)
   self.assertTrue(badge_awarded(self.user, "dailyvisitor"), "User should have been awarded the daily visitor badge.")
   self.assertTrue(self.quest in possibly_completed_quests(self.user), "User should have completed this quest.")
Exemplo n.º 2
0
        "Awarded",
    ]
    events = [
        "dailyvisitor",
    ]
    multiple = False
    image = "images/badges/Threepeater.gif"

    def award(self, **state):
        user = state["user"]
        visits = user.get_profile().daily_visit_count
        if visits >= 3:
            return BadgeAwarded()


badges.register(DailyVisitorBadge)


class FullyCommittedBadge(Badge):
    name = "Fully Committed"
    description = [
        "Participating in 5 commitments at the same time.",
    ]
    hint = "How committed are you?"
    slug = "fully_committed"
    levels = [
        "Awarded",
    ]
    events = [
        "fully_committed",
    ]
Exemplo n.º 3
0
import datetime

from django.test import TestCase
from django.contrib.auth.models import User

from lib.brabeion import badges

from components.makahiki_badges.user_badges import DailyVisitorBadge, FullyCommittedBadge
from components.activities.models import Commitment, CommitmentMember

badges.register(DailyVisitorBadge)
badges.register(FullyCommittedBadge)

class DailyVisitorBadgeTest(TestCase):
  def test_awarding(self):
    """
    Tests that the daily visitor badge is awarded to a user.
    """
    user = User(username="******", password="******")
    user.save()
    
    self.assertEqual(user.badges_earned.count(), 0, "Check that no badges are awarded.")
    profile = user.get_profile()
    profile.daily_visit_count = 1
    profile.save()
    badges.possibly_award_badge("dailyvisitor", user=user)
    
    self.assertEqual(user.badges_earned.count(), 0, "Check that still no badges are awarded.")
    
    profile.daily_visit_count = 3
    profile.save()
Exemplo n.º 4
0
import datetime

from components.makahiki_badges.user_badges import DailyVisitorBadge
from lib.brabeion import badges

badges.register(DailyVisitorBadge)

class LoginTrackingMiddleware(object):
  """
  This middleware tracks how many days in a row the user has come to the site.
  """
  
  def process_request(self, request):
    """Checks if the user is logged in and updates the tracking field."""
    if request.user.is_authenticated():
      profile = request.user.get_profile()
      last_visit = request.user.get_profile().last_visit_date
      today = datetime.date.today()

      # Look for a previous login.
      if last_visit and (today - last_visit) == datetime.timedelta(days=1):
        profile.last_visit_date = today
        profile.daily_visit_count += 1
        profile.save()
        badges.possibly_award_badge("dailyvisitor", user=request.user)

      elif not last_visit or (today - last_visit) > datetime.timedelta(days=1):
        # Reset the daily login count.
        profile.last_visit_date = today
        profile.daily_visit_count = 1
        profile.save()
Exemplo n.º 5
0
import datetime
import random
import string
import os

from django.db import models, IntegrityError
from django.contrib.auth.models import User
from django.contrib.contenttypes import generic
from django.core.urlresolvers import reverse

# Register badges immediately.
from components.makahiki_badges.user_badges import FullyCommittedBadge
from lib.brabeion import badges

badges.register(FullyCommittedBadge)

from components.floors.models import Post
from components.makahiki_base.models import Like
from components.makahiki_notifications.models import UserNotification

MARKDOWN_LINK = "http://daringfireball.net/projects/markdown/syntax"
MARKDOWN_TEXT = "Uses <a href=\"" + MARKDOWN_LINK + "\" target=\"_blank\">Markdown</a> formatting."
    
class Category(models.Model):
  """Categories used to group commitments and activities."""
  name = models.CharField(max_length=255, help_text="255 character maximum")
  slug = models.SlugField(help_text="Automatically generated if left blank.", null=True)

  class Meta:
    verbose_name_plural = "categories"