public void NewKeyEnteredIntoDatabase()
        {
            var  vm        = new AddOrUpdateIndicoApiKeyViewModel(null);
            var  init1     = vm.AddOrUpdateText;
            bool canExeAdd = false;

            vm.AddUpdateCommand.CanExecuteObservable.Subscribe(v => canExeAdd = v);
            bool canExeDelete = false;

            vm.DeleteCommand.CanExecuteObservable.Subscribe(v => canExeDelete = v);

            vm.SiteName = "full moon";
            Assert.IsFalse(canExeAdd);
            vm.SecretKey = "1234";
            Assert.IsFalse(canExeAdd);
            vm.ApiKey = "5678";
            Assert.IsTrue(canExeAdd);

            vm.AddUpdateCommand.Execute(null);

            var o = IndicoApiKeyAccess.GetKey("full moon");

            Assert.IsNotNull(o);
            Assert.AreEqual("full moon", o.Site);
            Assert.AreEqual("1234", o.SecretKey);
            Assert.AreEqual("5678", o.ApiKey);
        }
        public void DeleteKeyInDatabase()
        {
            var apiKey = new IndicoApiKey()
            {
                Site = "full moon", ApiKey = "1234", SecretKey = "5678"
            };

            IndicoApiKeyAccess.UpdateKey(apiKey);

            var  vm        = new AddOrUpdateIndicoApiKeyViewModel(apiKey);
            var  init1     = vm.AddOrUpdateText;
            bool canExeAdd = false;

            vm.AddUpdateCommand.CanExecuteObservable.Subscribe(v => canExeAdd = v);
            bool canExeDelete = false;

            vm.DeleteCommand.CanExecuteObservable.Subscribe(v => canExeDelete = v);

            Assert.IsTrue(canExeDelete);

            Assert.IsNotNull(IndicoApiKeyAccess.GetKey("full moon"));
            vm.DeleteCommand.Execute(null);
            Assert.IsNull(IndicoApiKeyAccess.GetKey("full moon"));

            Assert.IsFalse(canExeDelete);
            Assert.AreEqual("Add", vm.AddOrUpdateText);
        }
        public void LoadMissingApiKey()
        {
            int count = 0;

            IndicoApiKeyAccess.IndicoApiKeysUpdated.Subscribe(x => count++);
            var k = IndicoApiKeyAccess.GetKey("dummy");

            Assert.IsNull(k);
            Assert.AreEqual(0, count);
        }
Beispiel #4
0
        /// <summary>
        /// Create displaying everything. Having a key as null is fine - then everything
        /// starts out blank.
        /// </summary>
        /// <param name="key"></param>
        public AddOrUpdateIndicoApiKeyViewModel(IndicoApiKey key)
        {
            if (key == null)
            {
                SiteName  = "";
                ApiKey    = "";
                SecretKey = "";
            }
            else
            {
                SiteName  = key.Site;
                ApiKey    = key.ApiKey;
                SecretKey = key.SecretKey;
            }

            // Setup the add and update commands to work correctly.
            // A missing secret key is allowed.
            var addCanExe = this.WhenAny(x => x.SiteName, x => x.ApiKey, x => x.SecretKey, (site, apik, seck) => Tuple.Create(site.Value, apik.Value, seck.Value))
                            .Select(x => !string.IsNullOrWhiteSpace(x.Item1) && !string.IsNullOrWhiteSpace(x.Item2));

            AddUpdateCommand = ReactiveCommand.Create(addCanExe);

            var isKnownSite = new ReplaySubject <bool>(1);

            DeleteCommand = ReactiveCommand.Create(isKnownSite.StartWith(false));

            Observable.Merge(
                this.WhenAny(x => x.SiteName, x => x.Value),
                AddUpdateCommand.IsExecuting.Where(isexe => isexe == false).Select(_ => SiteName),
                DeleteCommand.IsExecuting.Where(isexe => isexe == false).Select(_ => SiteName)
                )
            .Select(sname => IndicoApiKeyAccess.GetKey(sname) != null)
            .Subscribe(gotit => isKnownSite.OnNext(gotit));

            isKnownSite
            .Select(known => known ? "Update" : "Add")
            .ToProperty(this, x => x.AddOrUpdateText, out _addOrUpdateText, "Add");

            // Add, update, or remove
            AddUpdateCommand
            .Subscribe(o => IndicoApiKeyAccess.UpdateKey(new IndicoApiKey()
            {
                Site = SiteName, ApiKey = ApiKey, SecretKey = SecretKey
            }));
            DeleteCommand
            .Subscribe(o => IndicoApiKeyAccess.RemoveKey(SiteName));
        }
        public void RemoveAllKeys()
        {
            int count = 0;

            IndicoApiKeyAccess.IndicoApiKeysUpdated.Subscribe(x => count++);
            var k = new IndicoApiKey()
            {
                ApiKey = "key", SecretKey = "noway", Site = "indico.cern.ch"
            };

            IndicoApiKeyAccess.UpdateKey(k);
            IndicoApiKeyAccess.RemoveAllKeys();
            var fk = IndicoApiKeyAccess.GetKey("indico.cern.ch");

            Assert.IsNull(fk);
            Assert.AreEqual(2, count);
        }
        public void UpdateExistingKey()
        {
            var k = new IndicoApiKey()
            {
                ApiKey = "key", SecretKey = "noway", Site = "indico.cern.ch"
            };

            IndicoApiKeyAccess.UpdateKey(k);
            k.ApiKey = "bogus";
            IndicoApiKeyAccess.UpdateKey(k);
            var fk = IndicoApiKeyAccess.GetKey("indico.cern.ch");

            Assert.IsNotNull(fk);
            Assert.AreEqual("bogus", fk.ApiKey);
            Assert.AreEqual("noway", fk.SecretKey);
            Assert.AreEqual("indico.cern.ch", fk.Site);
        }
        public void LoadPresentApi2KeysSecond()
        {
            var k = new IndicoApiKey()
            {
                ApiKey = "key", SecretKey = "noway", Site = "indico.cern.ch"
            };

            IndicoApiKeyAccess.UpdateKey(k);
            k.ApiKey = "key2";
            k.Site   = "indico.fnal.gov";
            IndicoApiKeyAccess.UpdateKey(k);

            var fk = IndicoApiKeyAccess.GetKey("indico.fnal.gov");

            Assert.IsNotNull(fk);
            Assert.AreEqual("key2", fk.ApiKey);
            Assert.AreEqual("noway", fk.SecretKey);
            Assert.AreEqual("indico.fnal.gov", fk.Site);
        }
        public void LoadPresentApiKey()
        {
            int count = 0;

            IndicoApiKeyAccess.IndicoApiKeysUpdated.Subscribe(x => count++);
            var k = new IndicoApiKey()
            {
                ApiKey = "key", SecretKey = "noway", Site = "indico.cern.ch"
            };

            IndicoApiKeyAccess.UpdateKey(k);
            var fk = IndicoApiKeyAccess.GetKey("indico.cern.ch");

            Assert.IsNotNull(fk);
            Assert.AreEqual("key", fk.ApiKey);
            Assert.AreEqual("noway", fk.SecretKey);
            Assert.AreEqual("indico.cern.ch", fk.Site);
            Assert.AreEqual(1, count);
        }