public void SendDesignLayer()
        {
            var token = "TestToken";

            GSA.App = new MockGSAApp(proxy: new GSAProxy());

            var testObjects    = new Dictionary <string, List <SpeckleObject> >();
            var sendersCreated = new List <TestSpeckleGSASender>();
            var tokensUsed     = new List <string>();

            Headless.streamSenderCreationFn = (url, t) =>
            {
                var sender = new TestSpeckleGSASender()
                {
                    ServerAddress = url, Token = t
                };
                sendersCreated.Add(sender);
                return(sender);
            };

            //Copy file so that it can be deleted later
            var origFilePath   = HelperFunctions.GetFullPath(sendGsaFileRelativePath);
            var copiedFilePath = HelperFunctions.GetFullPath(@".\SendAnalysisLayerTest.gwb");

            File.Copy(origFilePath, copiedFilePath, true);

            var exceptionThrown = false;

            try
            {
                var headless = new Headless();
                headless.RunCLI("sender",
                                "--server", restApi,
                                "--email", "*****@*****.**",
                                "--token", token,
                                "--file", copiedFilePath,
                                "--layer", "design"
                                );
            }
            catch
            {
                exceptionThrown = true;
            }
            finally
            {
                File.Delete(copiedFilePath);
            }
            Assert.IsFalse(exceptionThrown);

            //Check there 3 receivers were used with the restApi and token
            Assert.AreEqual(1, sendersCreated.Count());
            Assert.IsFalse(string.IsNullOrEmpty(sendersCreated[0].StreamId));
            Assert.AreEqual(restApi, sendersCreated[0].ServerAddress);
            Assert.AreEqual(testSenBucketStreamIds["model"], sendersCreated[0].StreamId);
            Assert.AreEqual(token, sendersCreated[0].Token);
            Assert.IsTrue(sendersCreated[0].SentObjects.Keys.Count() > 0);
            Assert.IsTrue(sendersCreated[0].SentObjects.Values.Count() > 0); //Number of times a streamSender.SendObjects has been called
        }
        public void SendAnalysisLayer()
        {
            var token = "TestToken";

            GSA.App = new MockGSAApp(proxy: new GSAProxy());

            var testObjects    = new Dictionary <string, List <SpeckleObject> >();
            var sendersCreated = new List <TestSpeckleGSASender>();
            var tokensUsed     = new List <string>();

            Headless.streamSenderCreationFn = (url, t) =>
            {
                var sender = new TestSpeckleGSASender()
                {
                    ServerAddress = url, Token = t
                };
                sendersCreated.Add(sender);
                return(sender);
            };

            var expectedTestCases = new[] { "A1", "C2" };
            var results           = new[] { "Nodal Displacements", "1D Element Displacement" };

            //Copy file so that it can be deleted later
            var origFilePath   = HelperFunctions.GetFullPath(sendGsaFileRelativePath);
            var copiedFilePath = HelperFunctions.GetFullPath(@".\SendAnalysisLayerTest.gwb");

            File.Copy(origFilePath, copiedFilePath, true);

            var exceptionThrown = false;

            try
            {
                var headless = new Headless();
                headless.RunCLI("sender",
                                "--server", restApi,
                                "--email", "*****@*****.**",
                                "--token", token,
                                "--file", copiedFilePath,
                                "--layer", "analysis",
                                "--separateStreams",
                                "--result", string.Join(",", results.Select(r => "\"" + r + "\"")),
                                "--resultCases", string.Join(",", expectedTestCases));
            }
            catch
            {
                exceptionThrown = true;
            }
            finally
            {
                File.Delete(copiedFilePath);
            }
            Assert.IsFalse(exceptionThrown);

            //Check there 3 receivers were used with the restApi and token
            Assert.AreEqual(2, sendersCreated.Count());
            Assert.IsTrue(sendersCreated.All(r => !string.IsNullOrEmpty(r.StreamId)));
            Assert.IsTrue(sendersCreated.All(r => r.ServerAddress.Equals(restApi)));
            Assert.IsTrue(sendersCreated.Select(r => r.StreamId).OrderBy(i => i).SequenceEqual(testSenBucketStreamIds.Values.OrderBy(i => i)));
            Assert.IsTrue(sendersCreated.All(r => r.Token.Equals(token)));
            Assert.IsTrue(sendersCreated.All(s => s.SentObjects.Keys.Count() > 0 && s.SentObjects.Values.Count() > 0)); //Number of times a streamSender.SendObjects has been called

            Assert.IsTrue(GSA.App.LocalSettings.ResultCases.SequenceEqual(expectedTestCases));
            Assert.IsTrue(GSA.App.LocalSettings.StreamSendConfig == SpeckleGSAInterfaces.StreamContentConfig.ModelWithTabularResults);
            Assert.IsTrue(GSA.App.LocalSettings.ResultTypes.Contains(SpeckleGSAInterfaces.ResultType.NodalDisplacements));
            Assert.IsTrue(GSA.App.LocalSettings.ResultTypes.Contains(SpeckleGSAInterfaces.ResultType.Element1dDisplacement));
        }