? project_issue_status_tests.patch
Index: project_issue.test
===================================================================
RCS file: project_issue.test
diff -N project_issue.test
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ project_issue.test	20 Apr 2010 22:20:56 -0000
@@ -0,0 +1,82 @@
+<?php
+class ProjectIssueWebTestCase extends ProjectWebTestCase {
+  /**
+   * Setup basic tasks for all project issue tests.
+   */
+  function setUp() {
+    // Setup the required modules for all tests.
+    $modules = func_get_args();
+    $modules = array_merge(array('project', 'path', 'project_issue'), $modules);
+    // We can't call parent::setUp() with a single array argument, so we need
+    // this ugly call_user_func_array().
+    call_user_func_array(array($this, 'parent::setUp'), $modules);
+
+    $admin_user = $this->drupalCreateUser(array('administer projects', 'access administration pages', 'create project issues', 'maintain projects'));
+    $this->drupalLogin($admin_user);
+  }
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Project Issue Status Functionality',
+      'description' => 'Test Project Issue Status Functionality.',
+      'group' => 'Project Issue'
+    );
+  }
+
+
+  /**
+   * Test the creation, reordering, and deletion of issue statuses.
+   */
+  function testIssueStatusCreation() {
+    // Test project issue status page.
+    $this->drupalGet('admin/project/project-issue-status');
+    $this->assertText(t('Project issue status options'));
+
+
+    // Test issue status creation.
+    $edit = array(
+      'status_add[name]' => $this->randomName(),
+      'status_add[default_query]' => 1,
+      'status_add[author_has]' => 1,
+    );
+
+    $this->drupalPost('admin/project/project-issue-status', $edit, t('Save'));
+    $status_id = db_result(db_query("SELECT pis.sid FROM {project_issue_state} pis WHERE pis.name = '%s'", $edit['status_add[name]']));
+    $this->assertFieldByName('status['. $status_id .'][name]', $edit['status_add[name]'], t('Issue status created successfully'));
+    $this->assertFieldByName('status['. $status_id .'][default_query]', $edit['status_add[default_query]']);
+    $this->assertFieldByName('status['. $status_id .'][author_has]', $edit['status_add[author_has]']);
+
+
+    // Test the default issue status implementation.
+    $this->createProject();
+    $this->drupalGet('node/add/project-issue');
+    $this->assertNoFieldbyName('sid', $status_id);
+
+    // Now set the default to our new status and ensure it works.
+    $this->drupalPost('admin/project/project-issue-status', array('default_state' => $status_id), t('Save'));
+    $this->drupalGet('node/add/project-issue');
+    $this->assertFieldByName('sid', $status_id);
+
+
+    // Test issue status reordering.
+    $edit = array();
+    $statuses = db_query("SELECT pis.sid FROM {project_issue_state} pis ORDER BY rand() LIMIT 3");
+    while ($s = db_fetch_object($statuses)) {
+      $edit['status['. $s->sid .'][weight]'] = rand(-15, 15);
+    }
+
+    $this->drupalPost('admin/project/project-issue-status', $edit, t('Save'));
+
+    foreach ($edit as $name => $weight) {
+      $this->assertFieldByName($name, $weight);
+    }
+
+    // Test deletion of issue status.
+    $this->drupalGet('admin/project/project-issue-status/delete/'. $status_id);
+    $this->assertText(t('Are you sure you want to delete the status option'));
+    $this->drupalPost('admin/project/project-issue-status/delete/'. $status_id, array('confirm' => 1), t('Delete'));
+    $this->drupalGet('admin/project/project-issue-status');
+    $this->assertNoFieldByName('status['. $status_id .'][name]');
+  }
+}
+
