def test_properOrphaning(self): """ If two installed items both depend on a third, it should be removed as soon as both installed items are removed, but no sooner. """ foo = Kitchen(store=self.store) e = Toaster(store=self.store) dependency.installOn(e, foo) ps = self.store.findUnique(PowerStrip) bb = self.store.findUnique(Breadbox) f = Blender(store=self.store) dependency.installOn(f, foo) self.assertEquals(list(self.store.query(PowerStrip)), [ps]) #XXX does ordering matter? self.assertEquals(set(dependency.installedDependents(ps, foo)), set([e, f])) self.assertEquals(set(dependency.installedRequirements(e, foo)), set([bb, ps])) self.assertEquals(list(dependency.installedRequirements(f, foo)), [ps]) dependency.uninstallFrom(e, foo) self.assertEquals(dependency.installedOn(ps), foo) dependency.uninstallFrom(f, foo) self.assertEquals(dependency.installedOn(ps), None)
def test_recursiveInstall(self): """ Installing an item should install all of its dependencies, and all of its dependencies, and so forth. """ foo = Kitchen(store=self.store) ic = IceCrusher(store=self.store) dependency.installOn(ic, foo) blender = self.store.findUnique(Blender) ps = self.store.findUnique(PowerStrip) self.assertEquals(dependency.installedOn(blender), foo) self.assertEquals(dependency.installedOn(ps), foo) self.assertEquals(list(dependency.installedRequirements(ic, foo)), [blender])
def test_basicInstall(self): """ If a Toaster gets installed in a Kitchen, make sure that the required dependencies get instantiated and installed too. """ foo = Kitchen(store=self.store) e = Toaster(store=self.store) self.assertEquals(e.powerStrip, None) dependency.installOn(e, foo) e.toast() ps = self.store.findUnique(PowerStrip, default=None) bb = self.store.findUnique(Breadbox, default=None) self.failIfIdentical(ps, None) self.failIfIdentical(bb, None) self.assertEquals(e.powerStrip, ps) self.assertEquals(ps.voltage, 110) self.assertEquals(e.breadFactory, bb) self.assertEquals(set(dependency.installedRequirements(e, foo)), set([ps, bb])) self.assertEquals(list(dependency.installedDependents(ps, foo)), [e])
def allPowerups(self): return set(chain(self.items, *[installedRequirements(self.store, i) for i in self.items]))