Remove Command::Done and add verification of Command state transitions

BUG:23906692
Change-Id: I1934ad70e1918cc5b40ac07ee1e1ccfee406867e
Reviewed-on: https://weave-review.googlesource.com/1259
Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/libweave/src/commands/command_instance_unittest.cc b/libweave/src/commands/command_instance_unittest.cc
index f783ca7..7c2536b 100644
--- a/libweave/src/commands/command_instance_unittest.cc
+++ b/libweave/src/commands/command_instance_unittest.cc
@@ -212,15 +212,37 @@
   EXPECT_TRUE(instance->SetResults(*CreateDictionaryValue("{'testResult': 17}"),
                                    nullptr));
 
-  ErrorPtr error;
-  Error::AddTo(&error, FROM_HERE, "DOMAIN", "CODE", "MESSAGE");
-  instance->Abort(error.get());
-
   json->MergeDictionary(CreateDictionaryValue(R"({
     'id': 'testId',
     'progress': {'progress': 15},
+    'state': 'done',
+    'results': {'testResult': 17}
+  })").get());
+
+  auto converted = instance->ToJson();
+  EXPECT_PRED2([](const base::Value& val1,
+                  const base::Value& val2) { return val1.Equals(&val2); },
+               *json, *converted);
+}
+
+TEST_F(CommandInstanceTest, ToJsonError) {
+  auto json = CreateDictionaryValue(R"({
+    'name': 'base.reboot',
+    'parameters': {}
+  })");
+  auto instance = CommandInstance::FromJson(json.get(), CommandOrigin::kCloud,
+                                            dict_, nullptr, nullptr);
+  instance->SetID("testId");
+
+  ErrorPtr error;
+  Error::AddTo(&error, FROM_HERE, "DOMAIN", "CODE", "MESSAGE");
+  instance->Abort(error.get(), nullptr);
+
+  json->MergeDictionary(CreateDictionaryValue(R"({
+    'id': 'testId',
     'state': 'aborted',
-    'results': {'testResult': 17},
+    'progress': {},
+    'results': {},
     'error': {'code': 'CODE', 'message': 'MESSAGE'}
   })").get());