def testBasicPublish(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) newShift.publish({"private": False}) # should exist in user/public db theShift = Shift.load(core.connect(SSUser.publicDb(self.fakemary.id)), newShift.id) self.assertEqual(theShift.summary, newShift.summary) self.assertTrue(not theShift.publishData.draft) self.assertTrue(not theShift.publishData.private) # should exist in shiftspace/public db theShift = Shift.load(core.connect("shiftspace/public"), newShift.id) self.assertEqual(theShift.summary, newShift.summary) self.assertTrue(not theShift.publishData.draft) self.assertTrue(not theShift.publishData.private) # should exist in shiftspace/shared db theShift = Shift.load(core.connect("shiftspace/shared"), newShift.id) self.assertEqual(theShift.summary, newShift.summary) self.assertTrue(not theShift.publishData.draft) self.assertTrue(not theShift.publishData.private) # should _not_ exist in user/private db theShift = Shift.load(core.connect(SSUser.privateDb(self.fakemary.id)), newShift.id) self.assertEqual(theShift, None)
def copyTo(self, dbname): db = core.connect(dbname) copy = self.toDict() del copy["_rev"] theId = copy["_id"] del copy["_id"] db[theId] = copy
def autocomplete(self, type="user", query=None): """ Helper for autocompletion of user names, group short names, and tags. """ import server.models.core from server.utils.returnTypes import data from server.setup import AutocompleteByUser, AutocompleteByGroup, AutocompleteByTag db = core.connect() if type == "group": view = AutocompleteByGroup elif type == "tag": view = AutocompleteByTag else: view = AutocompleteByUser result = view(db) rows = core.values(result[query:("%sZZZZZZZZZZ" % query)]) matches = [{ "_id": x["_id"], "name": x.get("userName") or x.get("shortName") or x.get("string"), "gravatar": x.get("gravatar"), "type": x["type"] } for x in rows if x["userName"] != "shiftspace"] return data(matches)
def testBasicPublish(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) newShift.publish({"private":False}) # should exist in user/public db theShift = Shift.load(core.connect(SSUser.publicDb(self.fakemary.id)), newShift.id) self.assertEqual(theShift.summary, newShift.summary) # should exist in master/public db theShift = Shift.load(core.connect("shiftspace/public"), newShift.id) self.assertEqual(theShift.summary, newShift.summary) # should exist in shiftspace/shared db theShift = Shift.load(core.connect("shiftspace/shared"), newShift.id) self.assertEqual(theShift.summary, newShift.summary) # should _not_ exist in user/private db theShift = Shift.load(core.connect(SSUser.privateDb(self.fakemary.id)), newShift.id) self.assertEqual(theShift, None)
def testUpdate(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) newShift.update({"summary":"changed!"}) theShift = Shift.read(newShift.id, self.fakemary.id) self.assertEqual(theShift.summary, "changed!") db = core.connect(SSUser.privateDb(self.fakemary.id)) del db[theShift.id]
def testRead(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) theShift = Shift.read(newShift.id, self.fakemary.id) self.assertEqual(theShift.source.server, newShift.source.server) self.assertEqual(theShift.source.database, newShift.source.database) self.assertEqual(theShift.createdBy, self.fakemary.id) db = core.connect(SSUser.privateDb(self.fakemary.id)) del db[theShift.id]
def testPublishToGroupAndUser(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) json = groupJson() json["createdBy"] = self.fakemary.id newGroup = Group.create(json) newPerm = Permission.create("shiftspace", newGroup.id, self.fakejohn.id, level=1) publishData = { "dbs": [Group.db(newGroup.id), SSUser.db(self.fakebob.id)] } newShift.publish(publishData) # should exist in subscriber's feed db = core.connect("shiftspace/shared") theShift = Shift.load(db, newShift.id) self.assertEqual(theShift.summary, newShift.summary) newGroup.delete() # should exist in shiftspace/shared # TODO: inbox if user is peer - David 11/18/09 theShift = Shift.load(core.connect("shiftspace/shared"), newShift.id) self.assertEqual(theShift.summary, newShift.summary)
def testPublishToUser(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) publishData = { "dbs": [SSUser.db(self.fakejohn.id)] } newShift.publish(publishData) # should exist in user feed # TODO: in inbox if peer - David 11/18/09 theShift = Shift.load(core.connect("shiftspace/shared"), newShift.id) self.assertEqual(theShift.summary, newShift.summary)
def deletedbs(): """ Delete the databases, the database path must have been set first for this to work. """ from server.models import core from server.models.ssuser import SSUser from server.models.group import Group # delete all core dbs and user and group dbs server = core.server() [group.delete() for group in core.objects(Group.all(core.connect()))] [user.delete() for user in core.objects(SSUser.all(core.connect()))] del server["shiftspace/public"] del server["shiftspace/shared"] del server["shiftspace/messages"] del server["shiftspace/master"] #[comment.deleteInstance() for comment in core.object(Comment.all(core.connect()))] # cleanup, remove any empty folders (left from deleted users try: fh = open("config/conf.json") except: print "config/conf.json does not exist. Set the path the database first." sys.exit(2) conf = json.loads(fh.read()) if conf.get("dbpath"): userdbdir = os.path.join(conf["dbpath"], "user") if os.path.exists(userdbdir): for file in os.listdir(userdbdir): filepath = os.path.join(userdbdir, file) if os.path.isdir(filepath): os.rmdir(filepath) os.rmdir(userdbdir) grpdbdir = os.path.join(conf["dbpath"], "group") if os.path.exists(grpdbdir): os.rmdir(grpdbdir) ssdbdir = os.path.join(conf["dbpath"], "shiftspace") if os.path.exists(ssdbdir): os.rmdir(ssdbdir)
def testCreate(self): json = shiftJson() json["createdBy"] = self.fakemary.id theShift = Shift.create(json) self.assertEqual(theShift.type, "shift") self.assertEqual(theShift.createdBy, self.fakemary.id) self.assertNotEqual(theShift.created, None) self.assertEqual(type(theShift.created), datetime.datetime) self.assertNotEqual(theShift.modified, None) self.assertEqual(type(theShift.modified), datetime.datetime) self.assertEqual(theShift.domain, "http://google.com") db = core.connect(SSUser.privateDb(self.fakemary.id)) del db[theShift.id]
def testPublishToFollowers(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) self.fakejohn.follow(self.fakemary) fakejohn = SSUser.read(self.fakejohn.id) # should be in the list of people fakejohn is following self.assertTrue(self.fakemary.id in fakejohn.following()) # should be in the list of fakemary's followers followers = self.fakemary.followers() self.assertTrue(self.fakejohn.id in followers) newShift.publish({"private":False}) # should exist in shiftspace/shared db theShift = Shift.load(core.connect("shiftspace/shared"), newShift.id) self.assertEqual(theShift.summary, newShift.summary)
def testCreate(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) newShift.publish({"private":False}) # create new comment newComment = Comment.create(self.fakejohn.id, newShift.id, "1st comment!") # shift comment db should now exist self.assertNotEqual(core.connect(Comment.db(newShift.id)), None) # shift should have thread self.assertTrue(newShift.hasThread()) # should be a comment count of 1 for shift count = newShift.commentCount() self.assertEqual(count, 1) # should be one message in fakemary's inbox from fakejohn messages = self.fakemary.messages() self.assertEqual(len(messages), 1) # delete the comment # TODO: separate fixture - David newComment.delete() # delete the thread newShift.deleteThread()
def testPublishToGroup(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) json = groupJson() json["createdBy"] = self.fakemary.id newGroup = Group.create(json) # make sure fakemary owns the group newPerm = Permission.readByUserAndGroup(self.fakemary.id, newGroup.id) self.assertTrue(newPerm.level == 4) # create read permission for fakejohn newPerm = Permission.create("shiftspace", newGroup.id, self.fakejohn.id, level=1) fakejohn = SSUser.read(self.fakejohn.id) self.assertTrue(Group.db(newGroup.id) in fakejohn.readable()) publishData = { "dbs": [Group.db(newGroup.id)] } newShift.publish(publishData) # should exists in shiftspace/shared db = core.connect("shiftspace/shared") theShift = Shift.load(db, newShift.id) self.assertEqual(theShift.summary, newShift.summary) newGroup.delete()
def testCreate(self): json = shiftJson() json["createdBy"] = self.fakemary.id newShift = Shift.create(json) newShift.publish({"private": False}) # create new comment newComment = Comment.create(self.fakejohn.id, newShift.id, "1st comment!") # shift comment db should now exist self.assertNotEqual(core.connect(Comment.db(newShift.id)), None) # shift should have thread self.assertTrue(newShift.hasThread()) # should be a comment count of 1 for shift count = newShift.commentCount() self.assertEqual(count, 1) # should be one message in fakemary's inbox from fakejohn messages = self.fakemary.messages() self.assertEqual(len(messages), 1) # delete the comment # TODO: separate fixture - David newComment.delete() # delete the thread newShift.deleteThread()
def autocomplete(self, type="user", query=None): """ Helper for autocompletion of user names, group short names, and tags. """ import server.models.core from server.utils.returnTypes import data from server.setup import AutocompleteByUser, AutocompleteByGroup, AutocompleteByTag db = core.connect() if type == "group": view = AutocompleteByGroup elif type == "tag": view = AutocompleteByTag else: view = AutocompleteByUser result = view(db) rows = core.values(result[query:("%sZZZZZZZZZZ" % query)]) matches = [{"_id": x["_id"], "name": x.get("userName") or x.get("shortName") or x.get("string"), "gravatar": x.get("gravatar"), "type": x["type"]} for x in rows if x["userName"] != "shiftspace"] return data(matches)
def tearDown(self): db = core.connect() self.fakemary.delete() self.fakejohn.delete() self.fakebob.delete()
def setUp(self): db = core.connect() self.fakemary = SSUser.create(fakemary) self.fakejohn = SSUser.create(fakejohn) self.fakebob = SSUser.create(fakebob) self.root = SSUser.read("shiftspace")
def tearDown(self): db = core.connect() SSUser.delete(self.fakemary) SSUser.delete(self.fakejohn) SSUser.delete(self.fakebob)
def delete(self, db=None): db = db or core.connect() del db[self.id]
import server.utils.utils as utils import server.models.core as core from server.tests.dummy_data import * from server.models.ssuser import SSUser from server.models.shift import Shift from server.models.group import Group from server.models.permission import Permission from server.models.favorite import Favorite from server.models.comment import Comment from server.models.follow import Follow from server.models.message import Message from server.lucene.lucene_design import LuceneDefinition def reload_models(): import server for m in [server.models.core, server.models.ssuser, server.models.shift, server.models.group, server.models.permission, server.models.favorite, server.models.comment, server.models.message, server.lucene.lucene_design]: reload(m) db = core.connect()
def updateIn(self, dbname): db = core.connect(dbname) old = db[self.id] copy = self.toDict() copy["_rev"] = old["_rev"] db[self.id] = copy
def setUp(self): db = core.connect() self.fakemary = SSUser.create(fakemary).id self.root = SSUser.read("shiftspace").id
import server.utils.utils as utils import server.models.core as core from server.tests.dummy_data import * from server.models.ssuser import SSUser from server.models.shift import Shift from server.models.group import Group from server.models.permission import Permission from server.models.favorite import Favorite from server.models.comment import Comment from server.models.follow import Follow from server.models.message import Message from server.lucene.lucene_design import LuceneDefinition def reload_models(): import server for m in [ server.models.core, server.models.ssuser, server.models.shift, server.models.group, server.models.permission, server.models.favorite, server.models.comment, server.models.message, server.lucene.lucene_design ]: reload(m) db = core.connect()