public void AssociateOriginal_ChangeSet_GetOriginal()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Submit));

            Assert.IsNull(this.OperationInvokedArgs);

            var entity = proxy.GetSingletonEntity();

            entity.Name = "CurrentEntity";
            Assert.AreEqual("CurrentEntity", entity.Name);

            var original = new MockEntity()
            {
                ID = entity.ID, Name = "OriginalEntity"
            };

            DomainServiceProxy.AssociateOriginal(proxy, entity, original);

            proxy.UpdateEntity(entity);
            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.AreEqual("UpdateEntity", this.OperationInvokedArgs.Name);
            Assert.AreEqual(1, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreSame(entity, this.OperationInvokedArgs.Parameters.Values.Single());
            Assert.AreEqual("OriginalEntity", entity.Name);
        }
        public void DisposalTracking()
        {
            var proxy  = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Submit));
            var entity = new MockEntity();

            var args = new List <OperationInvokedEventArgs>();
            EventHandler <OperationInvokedEventArgs> handler = (s, a) => args.Add(a);

            try
            {
                MockDomainService.Disposed += handler;

                // Invoke a operation multiple times
                proxy.CustomMethod(entity);
                proxy.CustomMethod(entity);
                proxy.CustomMethod(entity);

                proxy.Dispose();

                Assert.AreEqual(3, args.Count);
                Assert.AreEqual("Dispose", args[0].Name);
                Assert.AreEqual("Dispose", args[1].Name);
                Assert.AreEqual("Dispose", args[2].Name);
            }
            finally
            {
                MockDomainService.Disposed -= handler;
            }
        }
 public void Create_InvalidContract_ParameterMismatch()
 {
     ExceptionHelper.ExpectInvalidOperationException(
         () => DomainServiceProxy.Create <IMockDomainServiceContract_InvalidParameters, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query)),
         string.Format(
             CultureInfo.CurrentCulture,
             Resource.DomainServiceProxyGenerator_OperationMismatch,
             typeof(IMockDomainServiceContract_InvalidParameters),
             "GetEntities"));
 }
 public void Create_InvalidContract_Overloads()
 {
     ExceptionHelper.ExpectInvalidOperationException(
         () => DomainServiceProxy.Create <IMockDomainServiceContract_InvalidOverrides, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query)),
         string.Format(
             CultureInfo.CurrentCulture,
             Resource.DomainServiceProxyGenerator_OverridesNotSupported,
             typeof(IMockDomainServiceContract_InvalidOverrides),
             "GetEntities"));
 }
 public void Create_InvalidDomainServiceAccessibility()
 {
     ExceptionHelper.ExpectArgumentException(
         () => DomainServiceProxy.Create <IMockDomainServiceContract_ValidAccessibility, MockDomainService_InvalidAccessibility>(new MockDomainServiceContext(DomainOperationType.Query)),
         string.Format(
             CultureInfo.CurrentCulture,
             Resource.DomainServiceProxyGenerator_ExpectedPublicType,
             typeof(MockDomainService_InvalidAccessibility)),
         "domainService");
 }
 public void Create_InvalidContractEvents()
 {
     ExceptionHelper.ExpectInvalidOperationException(
         () => DomainServiceProxy.Create <IMockDomainServiceContract_InvalidEvents, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query)),
         string.Format(
             CultureInfo.CurrentCulture,
             Resource.DomainServiceProxyGenerator_MethodCountMismatch,
             typeof(IMockDomainServiceContract_InvalidEvents),
             typeof(MockDomainService),
             "add_InvalidEvent, remove_InvalidEvent"));
 }
        public void Query_ContinuableOperationError()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query));

            Assert.IsNull(this.OperationInvokedArgs);


            var ex = ExceptionHelper.ExpectException <OperationException>(
                () => proxy.GetEntitiesWithParams("abc", 499, 501, new Uri("http://param4", UriKind.Absolute)),
                Resource.DomainServiceProxy_OperationError);

            Assert.AreEqual(1, ex.OperationErrors.Count());
            Assert.AreEqual(@"The field param1 must match the regular expression '\d{1,3}'.", ex.OperationErrors.Single().Message);
        }
        public void Query_Singleton_NoParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query));

            Assert.IsNull(this.OperationInvokedArgs);

            var result = proxy.GetSingletonEntity();

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.IsNotNull(result);
            Assert.AreSame(MockDomainService.QueryReturnValue.First(), result);
            Assert.AreEqual("GetSingletonEntity", this.OperationInvokedArgs.Name);
            Assert.AreEqual(0, this.OperationInvokedArgs.Parameters.Count);
        }
        public void Query_NoParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query));

            Assert.IsNull(this.OperationInvokedArgs);

            var result = proxy.GetEntities();

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.IsNotNull(result);
            Assert.IsTrue(MockDomainService.QueryReturnValue.SequenceEqual(result));
            Assert.AreEqual("GetEntities", this.OperationInvokedArgs.Name);
            Assert.AreEqual(0, this.OperationInvokedArgs.Parameters.Count);
        }
        public void Insert()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Submit));

            Assert.IsNull(this.OperationInvokedArgs);

            var entity = proxy.GetSingletonEntity();

            proxy.InsertEntity(entity);
            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.AreEqual("InsertEntity", this.OperationInvokedArgs.Name);
            Assert.AreEqual(1, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreSame(entity, this.OperationInvokedArgs.Parameters.Values.Single());
        }
        public void InvokeOperation_NoParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Invoke));

            Assert.IsNull(this.OperationInvokedArgs);

            var result = proxy.InvokeOperation();

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.AreEqual(123, result);

            Assert.AreEqual("InvokeOperation", this.OperationInvokedArgs.Name);
            Assert.AreEqual(0, this.OperationInvokedArgs.Parameters.Count);
        }
        public void Custom_NoParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Submit));

            Assert.IsNull(this.OperationInvokedArgs);

            var entity = proxy.GetSingletonEntity();

            proxy.CustomMethod(entity);

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.AreEqual("CustomMethod", this.OperationInvokedArgs.Name);
            Assert.AreEqual(1, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreSame(entity, this.OperationInvokedArgs.Parameters["entity"]);
        }
        public void Custom_ContinuableOperationError()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Submit));

            Assert.IsNull(this.OperationInvokedArgs);

            var entity = proxy.GetSingletonEntity();

            entity.Name = "ThrowError";

            var ex = ExceptionHelper.ExpectException <OperationException>(
                () => proxy.CustomMethod(entity),
                Resource.DomainServiceProxy_OperationError);

            Assert.AreEqual(1, ex.OperationErrors.Count());
            Assert.AreEqual("ThrowError", ex.OperationErrors.Single().Message);
        }
        public void InvokeOperation_WithParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Invoke));

            Assert.IsNull(this.OperationInvokedArgs);

            var result = proxy.InvokeOperationWithParams(123, new[] { "a", "b", "c" }, null, null);

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.AreEqual("123", result);

            Assert.AreEqual("InvokeOperationWithParams", this.OperationInvokedArgs.Name);
            Assert.AreEqual(4, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreEqual((long)123, this.OperationInvokedArgs.Parameters["param1"]);
            Assert.AreEqual("abc", string.Join("", (string[])this.OperationInvokedArgs.Parameters["param2"]));
            Assert.AreEqual(null, this.OperationInvokedArgs.Parameters["param3"]);
            Assert.AreEqual(null, this.OperationInvokedArgs.Parameters["param4"]);
        }
        public void Custom_WithParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Submit));

            Assert.IsNull(this.OperationInvokedArgs);

            var entity = proxy.GetSingletonEntity();

            proxy.CustomMethodWithParams(entity, 123, new[] { "1", "2", "3" }, null, new Uri("http://param4", UriKind.Absolute));

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.AreEqual("CustomMethodWithParams", this.OperationInvokedArgs.Name);
            Assert.AreEqual(5, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreSame(entity, this.OperationInvokedArgs.Parameters["entity"]);
            Assert.AreEqual((long)123, this.OperationInvokedArgs.Parameters["param1"]);
            Assert.AreEqual("123", string.Join("", (string[])this.OperationInvokedArgs.Parameters["param2"]));
            Assert.AreEqual(null, this.OperationInvokedArgs.Parameters["param3"]);
            Assert.AreEqual("http://param4", ((Uri)this.OperationInvokedArgs.Parameters["param4"]).OriginalString);
        }
        public void Query_Singleton_WithParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query));

            Assert.IsNull(this.OperationInvokedArgs);

            var result = proxy.GetSingletonEntityWithParams("param1", 2, 3, new Uri("http://param4", UriKind.Absolute));

            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.IsNotNull(result);
            Assert.AreSame(MockDomainService.QueryReturnValue.First(), result);
            Assert.AreEqual("GetSingletonEntityWithParams", this.OperationInvokedArgs.Name);

            // Verify parameters
            Assert.AreEqual(4, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreEqual("param1", this.OperationInvokedArgs.Parameters["param1"]);
            Assert.AreEqual(2, this.OperationInvokedArgs.Parameters["param2"]);
            Assert.AreEqual((long)3, this.OperationInvokedArgs.Parameters["param3"]);
            Assert.AreEqual("http://param4", ((Uri)this.OperationInvokedArgs.Parameters["param4"]).OriginalString);
        }
        public void Create_DomainServiceContext()
        {
            var context = new MockDomainServiceContext(DomainOperationType.Query);

            // Create proxy, verify it's not null.
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(context);

            Assert.IsNotNull(proxy);

            // Examine its Context property
            PropertyInfo         contextProp  = proxy.GetType().GetProperty("Context");
            DomainServiceContext proxyContext = (DomainServiceContext)contextProp.GetGetMethod().Invoke(proxy, null);

            Assert.AreSame(context, proxyContext);

            // Examine its DomainServiceType property
            PropertyInfo typeProp  = proxy.GetType().GetProperty("DomainServiceType");
            Type         proxyType = (Type)typeProp.GetGetMethod().Invoke(proxy, null);

            Assert.AreEqual(typeof(MockDomainService), proxyType);
        }
        public void Query_WithParams()
        {
            var proxy = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query));

            Assert.IsNull(this.OperationInvokedArgs);

            var result = proxy.GetEntitiesWithParams("123", 499, 501, new Uri("http://param4", UriKind.Absolute));

            // Verify results
            Assert.IsNotNull(this.OperationInvokedArgs);
            Assert.IsNotNull(result);
            Assert.IsTrue(MockDomainService.QueryReturnValue.SequenceEqual(result));
            Assert.AreEqual("GetEntitiesWithParams", this.OperationInvokedArgs.Name);

            // Verify parameters
            Assert.AreEqual(4, this.OperationInvokedArgs.Parameters.Count);
            Assert.AreEqual("123", this.OperationInvokedArgs.Parameters["param1"]);
            Assert.AreEqual(499, this.OperationInvokedArgs.Parameters["param2"]);
            Assert.AreEqual((long)501, this.OperationInvokedArgs.Parameters["param3"]);
            Assert.AreEqual("http://param4", ((Uri)this.OperationInvokedArgs.Parameters["param4"]).OriginalString);
        }
 public static void Callback_MediumTrust_Proxies()
 {
     var proxy   = DomainServiceProxy.Create <IMockDomainServiceContract, MockDomainService>(new MockDomainServiceContext(DomainOperationType.Query));
     var results = proxy.GetEntities();
 }