text: from observertest import BaseObserverToscaTest
  
  from core.models import Site, Deployment, User, ControllerUser
  
  # Note that as a side effect, these tests will also create a Site
  
  class ObserverUserTest(BaseObserverToscaTest):
      tests = ["create_user"]
      # hide_observer_output = False # uncomment to display lots of stuff to screen
  
      def cleanup(self):
          # We don't want to leak resources, so we make sure to let the observer
          # attempt to delete these objects.
          self.try_to_delete(User, purge=False, email="johndoe@foo.bar")
          self.try_to_delete(Site, purge=False, login_base="testsite")
          self.run_observer()
          self.try_to_delete(User, purge=True, email="johndoe@foo.bar")
          self.try_to_delete(Site, purge=True, login_base="testsite")
  
      def assert_nouser(self, email):
          assert(not User.objects.filter(email=email))
  
      def assert_user(self, email, **kwargs):
          obj = User.objects.get(email=email)
          assert(obj)
          for (k,v) in kwargs.items():
              if (getattr(obj,k,None) != v):
                  print "Object %s property '%s' is '%s' and should be '%s'" % (obj, k, getattr(obj,k,None), v)
                  assert(False)
          return obj
  
      def create_user(self):
          self.assert_noobj(Site, "testsite")
          self.assert_nouser("johndoe@foo.bar")
          self.execute(self.make_nodetemplate(self.get_usable_deployment(), "tosca.nodes.Deployment",
                                              props={"no-delete": True}) +  \
  """
      testsite:
        type: tosca.nodes.Site
        properties:
            site_url: http://opencloud.us/
        requirements:
            - deployment:
                 node: %s
                 relationship: tosca.relationships.SiteDeployment
            - controller:
                 node: %s
                 relationship: tosca.relationships.UsesController
      johndoe@foo.bar:
        type: tosca.nodes.User
        properties:
            password: letmein
            firstname: john
            lastname: doe
        requirements:
            - site:
                node: testsite
                relationship: tosca.relationships.MemberOfSite
  """ % (self.get_usable_deployment(), self.get_usable_controller()))
  
          testsite = self.assert_obj(Site, "testsite")
          testuser = self.assert_user("johndoe@foo.bar")
  
          self.run_model_policy(save_output="/tmp/usertest:create_user:model_policy")
  
          # make sure a ControllerSite object was created
          cu = ControllerUser.objects.filter(user=testuser)
          assert(len(cu) == 1)
  
          self.run_observer(save_output="/tmp/usertest:create_user:observer")
  
          testuser = self.assert_user("johndoe@foo.bar")
  
          cu = ControllerUser.objects.filter(user=testuser)
          assert(len(cu) == 1)
          assert(cu[0].kuser_id is not None)
          assert(cu[0].kuser_id != "")
  
  if __name__ == "__main__":
      ObserverUserTest()
  
  