public void IsAssemblyQualifiedNameTest_True()
        {
            var tests = new[]
            {
                "UserQuery+C, query_quytvu, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
                "UserQuery+C, query_quytvu, Version=0.0.0.0",
                "UserQuery+C, query_quytvu",
                "UserQuery.C, query_quytvu, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null",
                "UserQuery.C, query_quytvu, Version=0.0.0.0",
                "UserQuery.C, query_quytvu",
                "a, b",
                "a.b, c.d",
                "a, x.y",
                "UserQuery+C, x.y",
                "List<Tuple<string, string>>, x.y",
                "Tuple<string, string>, x.y",
                "(a, b, c), x.y",
                "Dict<int, string[]>, x.y",
                "Dict<int, string[]>[], x.y",
                "Dict<string[], int>[], x.y",
                "Dict<string[], int>, x.y",
            };

            foreach (var test in tests)
            {
                var repositoryUses = new RepositoryUsesInfo {
                    PropertyType = test
                };
                Assert.IsTrue(repositoryUses.HasAssemblyQualifiedName(), $"Test input: {test}");
            }
        }
        private void InjectClearCacheOnSave(List <IConceptInfo> newConcepts, string entityName, string loadOldPropertyValue, string snippetClearCache)
        {
            var commonModule = new ModuleInfo {
                Name = "Common"
            };
            var entity = new EntityInfo {
                Module = commonModule, Name = entityName
            };
            var usesAuthorizationDataCache = new RepositoryUsesInfo
            {
                DataStructure = entity,
                PropertyType  = "Rhetos.Dom.DefaultConcepts.AuthorizationDataCache, Rhetos.Dom.DefaultConcepts",
                PropertyName  = "_authorizationDataCache"
            };
            var saveMethod = new SaveMethodInfo {
                Entity = entity
            };

            newConcepts.AddRange(new IConceptInfo[] { usesAuthorizationDataCache, saveMethod });

            if (loadOldPropertyValue != null)
            {
                var loadOldItems = new LoadOldItemsInfo {
                    SaveMethod = saveMethod
                };
                var loadOldItemsProperty = new LoadOldItemsTakeInfo {
                    LoadOldItems = loadOldItems, Path = loadOldPropertyValue
                };
                newConcepts.AddRange(new IConceptInfo[] { loadOldItems, loadOldItemsProperty });
            }

            var clearCache = new OnSaveUpdateInfo
            {
                SaveMethod    = saveMethod,
                RuleName      = "ClearAuthenticationCache",
                CsCodeSnippet = snippetClearCache
            };

            newConcepts.AddRange(new IConceptInfo[] { clearCache });
        }
        public void IsAssemblyQualifiedNameTest_False()
        {
            var tests = new[]
            {
                "a",
                "UserQuery+C",
                "List<Tuple<string, string>>",
                "Tuple<string, string>",
                "(a, b, c)",
                "Dict<int, string[]>",
                "Dict<int, string[]>[]",
                "Dict<string[], int>[]",
                "Dict<string[], int>",
            };

            foreach (var test in tests)
            {
                var repositoryUses = new RepositoryUsesInfo {
                    PropertyType = test
                };
                Assert.IsFalse(repositoryUses.HasAssemblyQualifiedName(), $"Test input: {test}");
            }
        }