diff --git a/tests/set_value_completion.cpp b/tests/set_value_completion.cpp
new file mode 100644
index 0000000..5ae7deb
--- /dev/null
+++ b/tests/set_value_completion.cpp
@@ -0,0 +1,93 @@
+
+/*
+ * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/
+ * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/
+ *
+ * Written by Václav Kubernát <kubervac@fit.cvut.cz>
+ *
+ */
+
+#include "trompeloeil_doctest.hpp"
+#include "datastoreaccess_mock.hpp"
+#include "leaf_data_helpers.hpp"
+#include "parser.hpp"
+#include "pretty_printers.hpp"
+#include "static_schema.hpp"
+
+TEST_CASE("set value completion")
+{
+    auto schema = std::make_shared<StaticSchema>();
+    schema->addModule("mod");
+    schema->addContainer("/", "mod:contA");
+    schema->addLeaf("/", "mod:leafEnum", createEnum({"lala", "lol", "data", "coze"}));
+    schema->addLeaf("/mod:contA", "mod:leafInCont", createEnum({"abc", "def"}));
+    schema->addList("/", "mod:list", {"number"});
+    schema->addLeaf("/mod:list", "mod:number", yang::Int32{});
+    schema->addLeaf("/mod:list", "mod:leafInList", createEnum({"ano", "anoda", "ne", "katoda"}));
+    schema->addIdentity(std::nullopt, ModuleValuePair{"mod", "food"});
+    schema->addIdentity(std::nullopt, ModuleValuePair{"mod", "vehicle"});
+    schema->addIdentity(ModuleValuePair{"mod", "food"}, ModuleValuePair{"mod", "pizza"});
+    schema->addIdentity(ModuleValuePair{"mod", "food"}, ModuleValuePair{"mod", "spaghetti"});
+    schema->addIdentity(ModuleValuePair{"mod", "pizza"}, ModuleValuePair{"pizza-module", "hawaii"});
+    schema->addLeaf("/", "mod:foodIdentRef", yang::IdentityRef{schema->validIdentities("mod", "food")});
+    auto mockDatastore = std::make_shared<MockDatastoreAccess>();
+    // The parser will use DataQuery for key value completion, but I'm not testing that here, so I don't return anything.
+    ALLOW_CALL(*mockDatastore, listInstances("/mod:list"))
+        .RETURN(std::vector<ListInstance>{});
+
+    // DataQuery gets the schema from DatastoreAccess once
+    auto expectation = NAMED_REQUIRE_CALL(*mockDatastore, schema())
+        .RETURN(schema);
+    auto dataQuery = std::make_shared<DataQuery>(*mockDatastore);
+    Parser parser(schema, dataQuery);
+    std::string input;
+    std::ostringstream errorStream;
+
+    std::set<std::string> expectedCompletions;
+    int expectedContextLength;
+
+    SECTION("set mod:leafEnum ")
+    {
+        input = "set mod:leafEnum ";
+        expectedCompletions = {"lala", "lol", "data", "coze"};
+        expectedContextLength = 0;
+    }
+
+    SECTION("set mod:leafEnum c")
+    {
+        input = "set mod:leafEnum c";
+        expectedCompletions = {"coze"};
+        expectedContextLength = 1;
+    }
+
+    SECTION("set mod:leafEnum l")
+    {
+        input = "set mod:leafEnum l";
+        expectedCompletions = {"lala", "lol"};
+        expectedContextLength = 1;
+    }
+
+
+    SECTION("set mod:contA/leafInCont ")
+    {
+        input = "set mod:contA/leafInCont ";
+        expectedCompletions = {"abc", "def"};
+        expectedContextLength = 0;
+    }
+
+    SECTION("set mod:list[number=42]/leafInList ")
+    {
+        input = "set mod:list[number=42]/leafInList ";
+        expectedCompletions = {"ano", "anoda", "ne", "katoda"};
+        expectedContextLength = 0;
+    }
+
+    SECTION("set mod:foodIdentRef ")
+    {
+        input = "set mod:foodIdentRef ";
+        expectedCompletions = {"mod:food", "mod:pizza", "mod:spaghetti", "pizza-module:hawaii"};
+        expectedContextLength = 0;
+    }
+
+    REQUIRE(parser.completeCommand(input, errorStream) == (Completions{expectedCompletions, expectedContextLength}));
+}
