Split out the invalid configurations tests

Split out the invalid configurations tests into their own file so that
they do not interfere with the valid use case examples. This paves the
way to add more invalid corner case tests.

Change-Id: I46570199440b7c4adb59115fb919aed1ba441e87
diff --git a/src/main/resources/Documentation/task_states.md b/src/main/resources/Documentation/task_states.md
index ec5c4f8..69b306e 100644
--- a/src/main/resources/Documentation/task_states.md
+++ b/src/main/resources/Documentation/task_states.md
@@ -19,9 +19,6 @@
   fail = is:open
   pass = is:open
 
-[root "Root straight INVALID"]
-  applicable = is:open
-
 [root "Root grouping PASS (subtask PASS)"]
   applicable = is:open
   subtask = Subtask PASS
@@ -34,14 +31,6 @@
   applicable = is:open
   subtask = Subtask FAIL
 
-[root "Root grouping WAITING (subtask INVALID)"]
-  applicable = is:open
-  subtask = Subtask INVALID
-
-[root "Root grouping WAITING (subtask missing)"]
-  applicable = is:open
-  subtask = MISSING
-
 [root "Root READY (subtask PASS)"]
   applicable = is:open
   pass = -is:open
@@ -58,16 +47,6 @@
   pass = is:open
   subtask = Subtask FAIL
 
-[root "Root WAITING (subtask INVALID)"]
-  applicable = is:open
-  pass = is:open
-  subtask = Subtask INVALID
-
-[root "Root WAITING (subtask missing)"]
-  applicable = is:open
-  pass = is:open
-  subtask = MISSING
-
 [root "Root IN PROGRESS"]
    applicable = is:open
    in-progress = is:open
@@ -106,6 +85,10 @@
   subtasks-external = user special
   subtasks-external = file missing
 
+[root "INVALIDS"]
+  applicable = is:open
+  subtasks-file = invalids.config
+
 [task "Subtask FAIL"]
   applicable = is:open
   fail = is:open
@@ -120,9 +103,6 @@
   applicable = is:open
   pass = is:open
 
-[task "Subtask INVALID"]
-  applicable = is:open
-
 [external "user special"]
   user = current-user
   file = special.config
@@ -149,6 +129,38 @@
   pass = is:open
 ```
 
+`task/invalids.config` file in project `All-Projects` on ref `refs/meta/config`.
+
+```
+[task "No PASS criteria"]
+  applicable = is:open
+
+[task "WAITING (subtask INVALID)"]
+  applicable = is:open
+  pass = is:open
+  subtask = Subtask INVALID
+
+[task "WAITING (subtask missing)"]
+  applicable = is:open
+  pass = is:open
+  subtask = MISSING # security bug: subtask name appears in output
+
+[task "Grouping WAITING (subtask INVALID)"]
+  applicable = is:open
+  subtask = Subtask INVALID
+
+[task "Grouping WAITING (subtask missing)"]
+  applicable = is:open
+  subtask = MISSING  # security bug: subtask name appears in output
+
+[task "Subtask INVALID"]
+  applicable = is:open
+
+[external "external missing"]
+  user = mfick
+  file = missing
+```
+
 `task/special.config` file in project `All-Users` on ref `refs/users/self`.
 
 ```
@@ -182,10 +194,6 @@
                "status" : "FAIL"
             },
             {
-               "name" : "Root straight INVALID",
-               "status" : "INVALID"
-            },
-            {
                "name" : "Root grouping PASS (subtask PASS)",
                "status" : "PASS",
                "subTasks" : [
@@ -222,26 +230,6 @@
                ]
             },
             {
-               "name" : "Root grouping WAITING (subtask INVALID)",
-               "status" : "WAITING",
-               "subTasks" : [
-                  {
-                     "name" : "Subtask INVALID",
-                     "status" : "INVALID"
-                  }
-               ]
-            },
-            {
-               "name" : "Root grouping WAITING (subtask missing)",
-               "status" : "WAITING",
-               "subTasks" : [
-                  {
-                     "name" : "MISSING",
-                     "status" : "INVALID"
-                  }
-               ]
-            },
-            {
                "name" : "Root READY (subtask PASS)",
                "readyHint" : "You must now run the ready task",
                "status" : "READY",
@@ -279,26 +267,6 @@
                ]
             },
             {
-               "name" : "Root WAITING (subtask INVALID)",
-               "status" : "WAITING",
-               "subTasks" : [
-                  {
-                     "name" : "Subtask INVALID",
-                     "status" : "INVALID"
-                  }
-               ]
-            },
-            {
-               "name" : "Root WAITING (subtask missing)",
-               "status" : "WAITING",
-               "subTasks" : [
-                  {
-                     "name" : "MISSING",
-                     "status" : "INVALID"
-                  }
-               ]
-            },
-            {
                "inProgress" : true,
                "name" : "Root IN PROGRESS",
                "status" : "READY"
@@ -399,6 +367,60 @@
                      "status" : "FAIL"
                   }
                ]
+            },
+            {
+               "name" : "INVALIDS",
+               "status" : "WAITING",
+               "subTasks" : [
+                  {
+                     "name" : "No PASS criteria",
+                     "status" : "INVALID"
+                  },
+                  {
+                     "name" : "WAITING (subtask INVALID)",
+                     "status" : "WAITING",
+                     "subTasks" : [
+                        {
+                           "name" : "Subtask INVALID",
+                           "status" : "INVALID"
+                        }
+                     ]
+                  },
+                  {
+                     "name" : "WAITING (subtask missing)",
+                     "status" : "WAITING",
+                     "subTasks" : [
+                        {
+                           "name" : "MISSING",
+                           "status" : "INVALID"
+                        }
+                     ]
+                  },
+                  {
+                     "name" : "Grouping WAITING (subtask INVALID)",
+                     "status" : "WAITING",
+                     "subTasks" : [
+                        {
+                           "name" : "Subtask INVALID",
+                           "status" : "INVALID"
+                        }
+                     ]
+                  },
+                  {
+                     "name" : "Grouping WAITING (subtask missing)",
+                     "status" : "WAITING",
+                     "subTasks" : [
+                        {
+                           "name" : "MISSING",
+                           "status" : "INVALID"
+                        }
+                     ]
+                  },
+                  {
+                     "name" : "Subtask INVALID",
+                     "status" : "INVALID"
+                  }
+               ]
             }
          ]
       }
diff --git a/test/check_task_statuses.sh b/test/check_task_statuses.sh
index 16167a4..5d58a6e 100755
--- a/test/check_task_statuses.sh
+++ b/test/check_task_statuses.sh
@@ -53,6 +53,7 @@
 
 ROOT_CFG=$ALL/task.config
 COMMON_CFG=$ALL_TASKS/common.config
+INVALIDS_CFG=$ALL_TASKS/invalids.config
 USER_SPECIAL_CFG=$USER_TASKS/special.config
 
 # --- Args ----
@@ -75,13 +76,13 @@
 
 example 1 |sed -e"s/current-user/$USER/" > "$ROOT_CFG"
 example 2 > "$COMMON_CFG"
-example 3 > "$USER_SPECIAL_CFG"
+example 3 > "$INVALIDS_CFG"
+example 4 > "$USER_SPECIAL_CFG"
 
 update_repo "$ALL" "$REMOTE_ALL" "$REF_ALL"
 update_repo "$USERS" "$REMOTE_USERS" "$REF_USERS"
 
-
-example 4 |tail -n +5| awk 'NR>1{print P};{P=$0}' > "$EXPECTED"
+example 5 |tail -n +5| awk 'NR>1{print P};{P=$0}' > "$EXPECTED"
 
 query_plugins "status:open limit:1" > "$STATUSES"
 diff "$EXPECTED" "$STATUSES"