PHP: Peridot and Propel

Wanted to share a little configuration I just finished making for some Peridot and Leo -based tests which work with Propel models.

A bunch of these tests write data to the database using the Propel models, and I need a clean slate DB before each test. I also need a clean slate HTTP session. Here’s some code ( from peridot.php ) that uses transactions to achieve that:

class MyScope extends Scope {
  function __construct( $emitter ) {
    $emitter->on( 'peridot.execute', function() {
      $this->conn = Propel::getConnection();
    } );

    $emitter->on( 'test.start', function() {
      self::destroySession();
      // have to rollback and begin here.
      // it was unreliable when I rolled back on test.end
      $this->conn->rollback();
      $this->conn->beginTransaction();
    } );
  }
  private static function destroySession() {
    session_start();
    $_SESSION =[];

    // If it's desired to kill the session, also delete the session cookie.
    // Note: This will destroy the session, and not just the session data!
    if (ini_get("session.use_cookies")) {
      $params = session_get_cookie_params();
      setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
      );
    }

    session_destroy();
  }
}

return function($emitter) {
  $gmsScope = new GmsScope( $emitter );

  //add this scope into every suite
  $emitter->on('suite.start', function($test) use ($gmsScope) {
    $test->getScope()->peridotAddChildScope($gmsScope);
  });
};

Scrum master cert test: formulate ScrumMaster duties in lay man’s terms

Provide vision for, and coaching toward achievement of below stated enterprise goals ( among others ):

– Input/output needs of parties involved in communication and other interaction/handoff points are well understood, and thus are always adequately met for said parties.

– Planning ( including daily ), goal/task follow-through and prioritization, customer validation and direct/gatekeepered channels for creating a shared team/customer understanding of the problem and proposed solution the software is addressing are all adequately enabled and well managed by the whole team. Continuous learning is employed in order to achieve continued evolution on all aspects of team-working.

– Functionality that the software implements is fully self-testing, fully self-documenting and perfectly annotated, and thus ultimatelly fully malleable as part of each delivery ( the software remains soft ).

– Motivation is actively managed and provided by the servant leaders of the team through enabling autonomy, mastery and full responsibility and empowerment for defining, and following through on, our worthy cause(tm). People are leaving at 5 every day to enable sustainable pace.

Sprint planning meeting

Recently I had the opportunity to consider what questions I need the sprint planning meeting to answer, and I will share it here so I can refer to it later, and in case it would be useful to you.

1. In what way can we adjust the current software so that our users would start using it after the sprint? ( adjust last part if your software is already in use )
2. What seems like the best way we can come up with right now for actually completing the suggested adjustment to the software by the end of the current sprint?
3. Who could we get to actually start use our adjustments to the software at the end of the sprint? ( all users of the software? Beta users? Alpha users? )

Seems it is valuable to keep those questions in mind for the sprint planning meeting. What questions do you try to answer during your sprint planning meeting?