public async Task WhenGetThenReturnsCorrectData()
        {
            // Arrange
            var responseJson = System.IO.File.ReadAllText("../../../Responses/search.response.json");

            var factory = TestHelper.GetIHttpClientFactoryMockObject(responseJson);

            var services = new ServiceCollection();

            services.AddMemoryCache();
            var servicesProvider = services.BuildServiceProvider();
            var memroyCache      = servicesProvider.GetService <IMemoryCache>();
            var cacheManager     = new CacheManager(memroyCache);

            var options = Options.Create(new GiphyClientOptions()
            {
                ApiKey = "aaa"
            });
            var client     = new GiphyClient(factory, options);
            var service    = new SearchService(client, cacheManager);
            var controller = new SearchController(null, service);

            // Act
            var result = await controller.Get("good time");

            // Assert
            Assert.Equal(TestHelper.JsonToDtosArray(responseJson), result);
        }
        public async Task WhenGetIsCalledTwiceThenReturnsDataFromCache()
        {
            // Arrange
            var responseJson = System.IO.File.ReadAllText("../../../Responses/search.response.json");

            var handlerMock = new Mock <HttpMessageHandler>();

            handlerMock.Protected()
            .Setup <Task <HttpResponseMessage> >(
                "SendAsync",
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>())
            .ReturnsAsync(new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.OK,
                Content    = new StringContent(responseJson),
            });

            var factoryMock = new Mock <IHttpClientFactory>();

            factoryMock
            .Setup(f => f.CreateClient("giphy"))
            .Returns(new HttpClient(handlerMock.Object)
            {
                BaseAddress = new Uri("http://test.com")
            });

            var services = new ServiceCollection();

            services.AddMemoryCache();
            var servicesProvider = services.BuildServiceProvider();
            var memroyCache      = servicesProvider.GetService <IMemoryCache>();
            var cacheManager     = new CacheManager(memroyCache);

            var options = Options.Create(new GiphyClientOptions()
            {
                ApiKey = "aaa"
            });
            var client     = new GiphyClient(factoryMock.Object, options);
            var service    = new SearchService(client, cacheManager);
            var controller = new SearchController(null, service);

            var query = "good time";
            await controller.Get(query);

            // Act
            var result = await controller.Get(query);

            // Assert
            handlerMock.Protected().Verify <Task <HttpResponseMessage> >(
                "SendAsync", new Type[] {}, Times.Once(),
                ItExpr.IsAny <HttpRequestMessage>(),
                ItExpr.IsAny <CancellationToken>());
        }
Exemple #3
0
        public async Task GifCommand()
        {
            string Tag    = Arg.Length < 1 ? Tag = "Anime" : Tag = Arg[0];
            var    Client = new GiphyClient(GiphyKey);
            var    Result = await Client.Gifs.SearchAsync(Tag);

            if (Result.Gifs.Count < 1)
            {
                await Channel.SendMessageAsync("couldn't find any result");

                return;
            }
            EmbedMaker maker = new EmbedMaker();

            maker.setTitle(Tag).setImage(Result.Gifs.ElementAt(new Random().Next(Result.Gifs.Count)).Images.Original.Url);
            await Channel.SendMessageAsync("", false, maker);
        }
        public async Task WhenGetThenReturnsCorrectData()
        {
            // Arrange
            var responseJson = System.IO.File.ReadAllText("../../../Responses/trending.response.json");

            var factory = TestHelper.GetIHttpClientFactoryMockObject(responseJson);

            var options = Options.Create(new GiphyClientOptions()
            {
                ApiKey = "aaa"
            });
            var client     = new GiphyClient(factory, options);
            var service    = new TrendingService(client);
            var controller = new TrendingController(null, service);

            // Act
            var result = await controller.Get();

            // Assert
            Assert.Equal(TestHelper.JsonToDtosArray(responseJson), result);
        }
Exemple #5
0
        private async Task <string> BotCommandAsync(string command)
        {
            var serverClient      = _httpClientFactory.CreateClient();
            var discoveryDocument = await serverClient.GetDiscoveryDocumentAsync(Configuration["URLIdentityServer4"]);

            var tokenResponse = await serverClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
            {
                Address = discoveryDocument.TokenEndpoint,

                ClientId     = "bot",
                ClientSecret = "secret",

                Scope = "api1"
            });


            string     text   = null;
            HttpClient client = new HttpClient();

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.AccessToken);
            // Récurération des données et convertion des données dans le bon type
            string content = await client.GetStringAsync(Configuration["URLAPI"] + "api/Data/BotCommands");

            List <BotCommand> botCommands = JsonConvert.DeserializeObject <List <BotCommand> >(content);

            var apiClient = _httpClientFactory.CreateClient();

            apiClient.SetBearerToken(tokenResponse.AccessToken);


            foreach (BotCommand botCommand in botCommands)
            {
                if (botCommand.Slug.Equals(command) && !command.Equals("/help"))
                {
                    text = botCommand.Answer;
                }

                if (command.Equals("/help"))
                {
                    text += "List des commandes : ";
                    foreach (BotCommand c in botCommands)
                    {
                        text += c.Slug + " ";
                    }
                    break;
                }

                if (command.Contains("/ban"))
                {
                    if (command.Contains("@"))
                    {
                        string[] line      = command.Split("@");
                        string   nametoBan = line[1];

                        //string content1 = await client.GetStringAsync(Configuration["URLAPI"] + "identity");
                        var response = await client.PutAsync(Configuration["URLAPI"] + $"api/BotActions/BanUser/{nametoBan}", new StringContent(nametoBan));

                        if (response.StatusCode == System.Net.HttpStatusCode.OK)
                        {
                            text = $"Utilisateur {nametoBan} banni";
                        }
                        else
                        {
                            text = $"Erreur de traitement";
                        }

                        break;
                    }
                    else
                    {
                        text = "Impossible d'exécuter la commande";
                    }
                }

                if (command.Contains("/giphy"))
                {
                    string[]    line        = command.Split(" ");
                    string      searchName  = line[1];
                    GiphyClient giphyClient = new GiphyClient(Configuration["GIPHY"]);
                    GiphyObject gif         = await giphyClient.Gifs.SearchAsync(searchName, 1);

                    _logger.LogInformation("GIPHYYYYYY");

                    if (gif != null)
                    {
                        foreach (var f in gif.Gifs)
                        {
                            text = f.Images.Original.Url;
                        }
                    }
                    else
                    {
                        text = "Aucun GIF ne correspond";
                    }
                    break;
                }
            }

            return(text);
        }
Exemple #6
0
        private void appDocOpened(object sender, Autodesk.Revit.DB.Events.DocumentOpenedEventArgs e)
        {
            Variables.logOpenEnd      = DateTime.Now;
            Variables.logOpenDuration = Variables.logOpenEnd - Variables.logOpenStart;

            Autodesk.Revit.ApplicationServices.Application app = sender as Autodesk.Revit.ApplicationServices.Application;
            Document doc = e.Document;

            #region Variables: Document & Application Variables
            string path = GetUNCPath(doc.PathName);

            BasicFileInfo fileInfo = BasicFileInfo.Extract(path);
            FileInfo      f        = new FileInfo(path);

            Variables.logComputerName    = Environment.MachineName;
            Variables.logChangesSaved    = fileInfo.AllLocalChangesSavedToCentral;
            Variables.logFileCentral     = GetUNCPath(fileInfo.CentralPath);
            Variables.logFileCentralName = Path.GetFileName(Variables.logFileCentral);
            Variables.logIsCentral       = fileInfo.IsCentral;
            Variables.logIsWorkshared    = fileInfo.IsWorkshared;
            Variables.logCreatedLocal    = fileInfo.IsCreatedLocal;

            Variables.logFileName = doc.Title;
            Variables.logFilePath = GetUNCPath(doc.PathName);
            Variables.logFileSize = Convert.ToInt32(f.Length / 1000000);

            Variables.logUsername      = app.Username;
            Variables.logVersionBuild  = app.VersionBuild;
            Variables.logVersionName   = app.VersionName;
            Variables.logVersionNumber = app.VersionNumber;
            #endregion

            #region Tracking: Start Logging Pinned Elements
            IEnumerable <Element> a = TrackChanges.Command.GetTrackedElements(doc);
            _start_state = TrackChanges.Command.GetSnapshot(a);
            #endregion


            #region Settings: Load settings if they exist (Extensible Storage)
            ParameterCommands.Load(doc);
            #endregion

            #region Post: Worksharing Warning-Opened Central Model
            bool patheq = string.Equals(Variables.logFileCentral, Variables.logFilePath);

            if (Variables.slackOn && Variables.slackWSWarn)
            {
                if (patheq && Variables.logIsWorkshared)
                {
                    string gif_lg_url = null;
                    string gif_sm_url = null;

                    if (Variables.giphySet > 0)
                    {
                        var    giphyClient = new GiphyClient();
                        string gif_msg     = giphyClient.GetRandomGif("Alarm").Content;
                        var    gif_resp    = JsonConvert.DeserializeObject <Giphy.Response>(gif_msg);

                        if (Variables.giphySet == 1)
                        {
                            gif_sm_url = gif_resp.data.fixed_height_small_url;
                        }

                        if (Variables.giphySet == 2)
                        {
                            gif_lg_url = gif_resp.data.image_url;
                        }
                    }

                    var slackClient = new SlackClient(Variables.slackToken);

                    string text     = "";
                    string channel  = Variables.slackChId;
                    string botname  = "Worksharing Warning";
                    string icon_url = Variables.icon_revit;

                    var attachments = new Attachments
                    {
                        fallback = Variables.logUsername + "has opened the central model",
                        color    = "danger",
                        fields   =
                            new Fields[]
                        {
                            new Fields
                            {
                                title  = "Description",
                                value  = "The user has opened the central model. Close the central model and create a new local file> to work from.",
                                @short = false
                            },
                            new Fields
                            {
                                title  = "User",
                                value  = Variables.logUsername,
                                @short = true
                            },
                            new Fields
                            {
                                title  = "File",
                                value  = Variables.logFileCentralName,
                                @short = true
                            }
                        },
                        image_url = gif_lg_url,
                        thumb_url = gif_sm_url
                    };

                    string msg_response = slackClient.PostMessage(text, channel: channel, botName: botname, attachments: attachments, icon_url: icon_url).Content;
                    var    resp         = JsonConvert.DeserializeObject <ChatPostMessageResponse>(msg_response);
                    msgts_ws.Add(resp.ts);
                }
            }
            #endregion

            #region Post: Model Warning-File Size > 300MB
            if (Variables.slackOn && Variables.slackModelWarn)
            {
                string gif_lg_url = null;
                string gif_sm_url = null;

                if (Variables.logFileSize > 300)
                {
                    if (Variables.giphySet > 0)
                    {
                        var    giphyClient = new GiphyClient();
                        string gif_msg     = giphyClient.GetRandomGif("Gasp").Content;
                        var    gif_resp    = JsonConvert.DeserializeObject <Giphy.Response>(gif_msg);

                        if (Variables.giphySet == 1)
                        {
                            gif_sm_url = gif_resp.data.fixed_height_small_url;
                        }

                        if (Variables.giphySet == 2)
                        {
                            gif_lg_url = gif_resp.data.image_url;
                        }

                        var slackClient = new SlackClient(Variables.slackToken);

                        string text     = "";
                        string channel  = Variables.slackChId;
                        string botname  = "Model Warning";
                        string icon_url = Variables.icon_revit;

                        var attachments = new Attachments
                        {
                            fallback = "The file size has gone above 300MB, time to do some model file size management.",
                            color    = "danger",
                            fields   =
                                new Fields[]
                            {
                                new Fields
                                {
                                    title  = "Description",
                                    value  = "The file size is above 300MB, time to do some model maintenance",
                                    @short = false
                                },
                                new Fields
                                {
                                    title  = "File Size",
                                    value  = Variables.logFileSize.ToString() + "MB",
                                    @short = true
                                },
                                new Fields
                                {
                                    title  = "File",
                                    value  = Variables.logFileCentralName,
                                    @short = true
                                }
                            },
                            image_url = gif_lg_url,
                            thumb_url = gif_sm_url
                        };

                        string msg_response = slackClient.PostMessage(text, channel: channel, botName: botname, attachments: attachments, icon_url: icon_url).Content;
                        var    resp         = JsonConvert.DeserializeObject <ChatPostMessageResponse>(msg_response);

                        msgts_model.Add(resp.ts);
                    }
                }
                #endregion

                #region Post: Tracking-Pinned Element-Started

                if (Variables.slackOn && Variables.slackExtraTrackPin)
                {
                    var slackClient = new SlackClient(Variables.slackToken);

                    //Post pinned elements message
                    string text     = "";
                    string channel  = Variables.slackChId;
                    string botname  = "Pinning Info";
                    string icon_url = Variables.icon_revit;


                    var attachments = new Attachments
                    {
                        fallback = Variables.logUsername + "has started tracking pinned elements.",
                        color    = "good",
                        fields   =
                            new Fields[]
                        {
                            new Fields
                            {
                                title  = "Status",
                                value  = Variables.logUsername + " has started tracking pinned elements.\n[" + Variables.logFileCentralName + "]",
                                @short = true
                            }
                        }
                    };

                    string msg_response = slackClient.PostMessage(text, channel: channel, botName: botname, attachments: attachments, icon_url: icon_url).Content;
                    var    resp         = JsonConvert.DeserializeObject <ChatPostMessageResponse>(msg_response);
                    msgts_extra.Add(resp.ts);
                }
                #endregion
            }
        }
Exemple #7
0
        private void appDocClosing(object sender, Autodesk.Revit.DB.Events.DocumentClosingEventArgs e)
        {
            BasicFileInfo fileInfo = BasicFileInfo.Extract(Variables.logFilePath);

            #region Post: Worksharing Warning-Close without saving

            if (Variables.slackOn && Variables.slackWSWarn)
            {
                if (fileInfo.AllLocalChangesSavedToCentral == false)
                {
                    string gif_lg_url = null;
                    string gif_sm_url = null;

                    if (Variables.giphySet > 0)
                    {
                        var    giphyClient = new GiphyClient();
                        string gif_msg     = giphyClient.GetRandomGif("Disappointed").Content;
                        var    gif_resp    = JsonConvert.DeserializeObject <Giphy.Response>(gif_msg);
                        if (Variables.giphySet == 1)
                        {
                            gif_sm_url = gif_resp.data.fixed_height_small_url;
                        }
                        if (Variables.giphySet == 2)
                        {
                            gif_lg_url = gif_resp.data.image_url;
                        }
                    }
                    var slackClient = new SlackClient(Variables.slackToken);

                    string text     = "";
                    string channel  = Variables.slackChId;
                    string botname  = "Worksharing Warning";
                    string icon_url = Variables.icon_revit;

                    var attachments = new Attachments
                    {
                        fallback = Variables.logUsername + "did not save to central before closing",
                        color    = "danger",
                        fields   =
                            new Fields[]
                        {
                            new Fields
                            {
                                title  = "Description",
                                value  = "The user has closed the model without saving their changes back to the central model. Open the model and save changes back to the central model.",
                                @short = false
                            },
                            new Fields
                            {
                                title  = "User",
                                value  = Variables.logUsername,
                                @short = true
                            },
                            new Fields
                            {
                                title  = "File",
                                value  = Variables.logFileCentralName,
                                @short = true
                            }
                        },
                        image_url = gif_lg_url,
                        thumb_url = gif_sm_url
                    };

                    string msg_response = slackClient.PostMessage(text, channel: channel, botName: botname, attachments: attachments, icon_url: icon_url).Content;
                    var    resp         = JsonConvert.DeserializeObject <ChatPostMessageResponse>(msg_response);
                    msgts_ws.Add(resp.ts);
                }
            }
            #endregion
        }
Exemple #8
0
        private void appDocSynched(object sender, Autodesk.Revit.DB.Events.DocumentSynchronizedWithCentralEventArgs e)
        {
            Variables.logSyncEnd      = DateTime.Now;
            Variables.logSyncDuration = Variables.logSyncEnd - Variables.logSyncStart;
            Document doc = e.Document;

            #region Settings: Reload from Extensible Storage
            ParameterCommands.Load(doc);
            #endregion

            #region Extra: Tracking-Report Differences after Sync
            IEnumerable <Element>    a         = TrackChanges.Command.GetTrackedElements(doc);
            Dictionary <int, string> end_state = TrackChanges.Command.GetSnapshot(a);
            string results = TrackChanges.Command.ReportDifferences(doc, _start_state, end_state);
            _start_state = TrackChanges.Command.GetSnapshot(a);

            #endregion

            #region Post: Worksharing Info-Synchronized to Central

            if (Variables.slackOn && Variables.slackWSInfo)
            {
                string gif_lg_url = null;
                string gif_sm_url = null;

                if (Variables.giphySet > 0)
                {
                    var    giphyClient = new GiphyClient();
                    string gif_msg     = giphyClient.GetRandomGif("ThumbsUp").Content;
                    var    gif_resp    = JsonConvert.DeserializeObject <Giphy.Response>(gif_msg);

                    if (Variables.giphySet == 1)
                    {
                        gif_sm_url = gif_resp.data.fixed_height_small_url;
                    }
                    if (Variables.giphySet == 2)
                    {
                        gif_lg_url = gif_resp.data.image_url;
                    }
                }
                var slackClient = new SlackClient(Variables.slackToken);

                //Delete previous synching message, if enabled
                if (Variables.tidySet > 0)
                {
                    slackClient.DeleteMessage(msgts_synching, Variables.slackChId);
                    msgts_synching.Clear();
                }

                //Post synched message
                string text     = "";
                string channel  = Variables.slackChId;
                string botname  = "Synching Info";
                string icon_url = Variables.icon_revit;

                var attachments = new Attachments
                {
                    fallback = Variables.logUsername + "has synched",
                    color    = "good",
                    fields   =
                        new Fields[]
                    {
                        new Fields
                        {
                            title  = "Status",
                            value  = Variables.logUsername + " has synched to central.\n[" + Variables.logFileCentralName + " (Size: " + Variables.logFileSize.ToString() + "MB) ]",
                            @short = true
                        },
                        new Fields
                        {
                            title  = "Duration",
                            value  = string.Format("{0:hh\\:mm\\:ss}", Variables.logSyncDuration),
                            @short = true
                        }
                    },
                    image_url = gif_lg_url,
                    thumb_url = gif_sm_url
                };

                string msg_response = slackClient.PostMessage(text, channel: channel, botName: botname, attachments: attachments, icon_url: icon_url).Content;
                var    resp         = JsonConvert.DeserializeObject <ChatPostMessageResponse>(msg_response);
                msgts_synching.Add(resp.ts);
            }
            #endregion
        }
Exemple #9
0
        private async static Task TestWithTasks()
        {
            var config      = new GiphyApiClientConfig();
            var restClient  = new RestClient(config.BaseUrl);
            var giphyClient = new GiphyClient(restClient, config);

            //tests.
            Console.WriteLine("\nPerforming gifs Tasks...");


            var searchTask = await giphyClient.SearchAsync(new SearchParams("Barf")
                                                           .WithLimit(5)
                                                           .WithOffset(2)
                                                           .WithRating("g")
                                                           .WithLanguage("fr"));

            Console.WriteLine("\nsearch task results");
            HandleMultipleCallback(searchTask);


            var trendingResult = await giphyClient.TrendingAsync(new TrendingParams(contentRating : "pg-13")
                                                                 .WithFormat("json")
                                                                 .WithLimit(10)
                                                                 .WithOffset(3)
                                                                 .WithRating("g"));

            Console.WriteLine("trending task results");
            HandleMultipleCallback(trendingResult);


            var translateResult = await giphyClient.TranslateAsync(new TranslateParams(search : "chewy"));

            Console.WriteLine("translate Task results");
            HandleSingleCallback(translateResult);


            var randomResult = await giphyClient.RandomAsync(new RandomParams()
                                                             .WithTag("kanye")
                                                             .WithFormat("json")
                                                             .WithRating("g"));

            Console.WriteLine("random task results");
            HandleRandomCallback(randomResult);


            var idResult = await giphyClient.GifByIdAsync(new GifByIdParams(gifId : "3oriNV6Cxf43fczQje"));

            Console.WriteLine("id task results");
            HandleSingleCallback(idResult);


            var idsResult = await giphyClient.GifsByIdsAsync(new GifsByIdParams(gifIds : new string[] { "3oriNV6Cxf43fczQje", "3oriNRqnlzW4LwLUqI" }));

            Console.WriteLine("ids task results");
            HandleMultipleCallback(idsResult);


            Console.WriteLine("\nPerforming Stickers Tasks...");
            var searchStickersResult = await giphyClient.StickerSearchAsync(new SearchParams("Barf"));

            Console.WriteLine("search stickers results");
            HandleMultipleCallback(searchStickersResult);


            var trendingStickersResult = await giphyClient.StickerTrendingAsync(new TrendingParams()
                                                                                .WithFormat("json")
                                                                                .WithLimit(10)
                                                                                .WithOffset(0)
                                                                                .WithRating("g"));

            Console.WriteLine("trending stickers results");
            HandleMultipleCallback(trendingStickersResult);


            var translateStickersResult = await giphyClient.StickerTranslateAsync(new TranslateParams("larb"));

            Console.WriteLine("translate stickers results");
            HandleSingleCallback(translateStickersResult);


            var randomStickersResult = await giphyClient.StickerRandomAsync(new RandomParams()
                                                                            .WithTag("beef")
                                                                            .WithFormat("json")
                                                                            .WithRating("g"));

            Console.WriteLine("random stickers results");
            HandleRandomCallback(randomStickersResult);
        }
Exemple #10
0
 public SearchService(GiphyClient client, CacheManager cache)
 {
     _client = client;
     _cache  = cache;
 }
 public TrendingService(GiphyClient giphyClient)
 {
     _giphyClient = giphyClient;
 }