text: 
  from __future__ import unicode_literals
  
  import os
  import json
  import tempfile
  import unittest
  
  from werkzeug.wrappers import Response
  
  from isso import Isso, core, config, dist
  from isso.utils import http
  
  from fixtures import curl, loads, FakeIP, JSONClient
  http.curl = curl
  
  
  class TestVote(unittest.TestCase):
  
      def setUp(self):
          self.path = tempfile.NamedTemporaryFile().name
  
      def makeClient(self, ip):
  
          conf = config.load(os.path.join(dist.location, "share", "isso.conf"))
          conf.set("general", "dbpath", self.path)
          conf.set("guard", "enabled", "off")
          conf.set("hash", "algorithm", "none")
  
          class App(Isso, core.Mixin):
              pass
  
          app = App(conf)
          app.wsgi_app = FakeIP(app.wsgi_app, ip)
  
          return JSONClient(app, Response)
  
      def testZeroLikes(self):
  
          rv = self.makeClient("127.0.0.1").post("/new?uri=test", data=json.dumps({"text": "..."}))
          self.assertEqual(loads(rv.data)['likes'], 0)
          self.assertEqual(loads(rv.data)['dislikes'], 0)
  
      def testSingleLike(self):
  
          self.makeClient("127.0.0.1").post("/new?uri=test", data=json.dumps({"text": "..."}))
          rv = self.makeClient("0.0.0.0").post("/id/1/like")
  
          self.assertEqual(rv.status_code, 200)
          self.assertEqual(loads(rv.data)["likes"], 1)
  
      def testSelfLike(self):
  
          bob = self.makeClient("127.0.0.1")
          bob.post("/new?uri=test", data=json.dumps({"text": "..."}))
          rv = bob.post('/id/1/like')
  
          self.assertEqual(rv.status_code, 200)
          self.assertEqual(loads(rv.data)["likes"], 0)
  
      def testMultipleLikes(self):
  
          self.makeClient("127.0.0.1").post("/new?uri=test", data=json.dumps({"text": "..."}))
          for num in range(15):
              rv = self.makeClient("1.2.%i.0" % num).post('/id/1/like')
              self.assertEqual(rv.status_code, 200)
              self.assertEqual(loads(rv.data)["likes"], num + 1)
  
      def testVoteOnNonexistentComment(self):
          rv = self.makeClient("1.2.3.4").post('/id/1/like')
          self.assertEqual(rv.status_code, 200)
          self.assertEqual(loads(rv.data), None)
  
      def testTooManyLikes(self):
  
          self.makeClient("127.0.0.1").post("/new?uri=test", data=json.dumps({"text": "..."}))
          for num in range(256):
              rv = self.makeClient("1.2.%i.0" % num).post('/id/1/like')
              self.assertEqual(rv.status_code, 200)
  
              if num >= 142:
                  self.assertEqual(loads(rv.data)["likes"], 142)
              else:
                  self.assertEqual(loads(rv.data)["likes"], num + 1)
  
      def testDislike(self):
          self.makeClient("127.0.0.1").post("/new?uri=test", data=json.dumps({"text": "..."}))
          rv = self.makeClient("1.2.3.4").post('/id/1/dislike')
  
          self.assertEqual(rv.status_code, 200)
          self.assertEqual(loads(rv.data)['likes'], 0)
          self.assertEqual(loads(rv.data)['dislikes'], 1)
  