예제 #1
0
        /// <summary>
        /// Get printer detail
        /// reference: https://developers.google.com/cloud-print/docs/appInterfaces#printer
        /// </summary>
        /// <param name="request">Parameters for /printer interface</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>Response from google cloud</returns>
        public async Task <PrinterResponse> GetPrinterAsync(PrinterRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            await UpdateTokenAsync(cancellationToken);

            var form = new Dictionary <string, string>();

            form.Add("printerid", request.PrinterId);
            if (!string.IsNullOrEmpty(request.Client))
            {
                form.Add("client", request.Client);
            }
            if (!string.IsNullOrEmpty(request.ExtraFields))
            {
                form.Add("extra_fields", request.ExtraFields);
            }
            form.Add("use_cdd", request.UseCdd.ToString());
            if (request.PrinterConnectionStatus)
            {
                form.Add("printer_connection_status", request.PrinterConnectionStatus.ToString());
            }

            return(await GoogleCloudPrintBaseUrl
                   .AppendPathSegment("printer")
                   .WithOAuthBearerToken(_token.AccessToken)
                   .PostUrlEncodedAsync(form, cancellationToken)
                   .ReceiveJsonButThrowIfFails <PrinterResponse>()
                   .ConfigureAwait(false));
        }
        public async Task UpdatePrinter_ValidRequest_ShouldCommit()
        {
            //Arrange
            var guid        = Guid.Parse("BF521211-CEAF-4DCA-82C7-40446D4C46ED");
            var fakePrinter = new SiteConfiguration.API.Printers.Models.Data.Printer
            {
                PrinterKey      = guid,
                PrinterModelKey = guid
            };

            var fakePrinterModel = new SiteConfiguration.API.Printers.Models.Data.PrinterModel
            {
                PrinterModelKey = guid
            };

            var fakePrinterRequest = new PrinterRequest();

            _printerRepository.Setup(x => x.GetAsync(It.IsAny <Guid>())).ReturnsAsync(fakePrinter);
            _printerModelRepository.Setup(x => x.GetAsync(It.IsAny <Guid>())).ReturnsAsync(fakePrinterModel);

            //Act
            await printerBusiness.UpdatePrinter(guid, guid, fakePrinterRequest);

            //Assert
            _unitOfWork.Verify(x => x.CommitChanges(), Times.Once);
        }
예제 #3
0
        public async Task AddPrinter_ValidRequest_ShouldReturnStatusCode201()
        {
            //Arrange
            var fakePrinterRequest = new PrinterRequest();

            //Act
            var response = await printerController.AddPrinter(fakePrinterRequest) as StatusCodeResult;

            //Assert
            Assert.Equal(201, response.StatusCode);
        }
예제 #4
0
        public async Task UpdatePrinter_ValidRequest_ShouldReturnOkStatus()
        {
            //Arrange
            var fakePrinterRequest = new PrinterRequest();

            //Act
            var response = await printerController.UpdatePrinter(fakePrinterRequest) as OkResult;

            //Assert
            Assert.Equal(200, response.StatusCode);
        }
예제 #5
0
        /// <summary>
        /// Get printer detail
        /// reference: https://developers.google.com/cloud-print/docs/appInterfaces#printer
        /// </summary>
        /// <param name="request">Parameters for /printer interface</param>
        /// <param name="cancellationToken">Cancellation token</param>
        /// <returns>Response from google cloud</returns>
        public async Task <PrintersResponse <PrinterRequest> > GetPrinterAsync(PrinterRequest request, CancellationToken cancellationToken = default(CancellationToken))
        {
            await UpdateTokenAsync(cancellationToken);

            return(await GoogleCloudPrintBaseUrl
                   .AppendPathSegment("printer")
                   .WithOAuthBearerToken(_token.AccessToken)
                   .PostRequestAsync(request, cancellationToken)
                   .ReceiveJsonButThrowIfFails <PrintersResponse <PrinterRequest> >()
                   .ConfigureAwait(false));
        }
예제 #6
0
        public async Task AddPrinter_Exception_ShouldReturnStatusCode500()
        {
            //Arrange
            _printerBusiness.Setup(x => x.AddPrinter(It.IsAny <PrinterRequest>(), It.IsAny <Guid>())).Throws(new Exception());
            var fakePrinterRequest = new PrinterRequest();

            //Act
            var response = await printerController.AddPrinter(fakePrinterRequest) as StatusCodeResult;

            //Assert
            Assert.Equal(500, response.StatusCode);
        }
예제 #7
0
        public async Task UpdatePrinter_PrinterException_ShouldReturnBadRequest()
        {
            //Arrange
            var fakePrinterRequest = new PrinterRequest();

            _printerBusiness.Setup(x => x.UpdatePrinter(It.IsAny <Guid>(), It.IsAny <Guid>(), It.IsAny <PrinterRequest>())).ThrowsAsync(new InvalidPrinterException(Resource.ResourceManager.GetString($"E{ErrorCode.ResourceNotFound}"), ErrorCode.ResourceNotFound));

            //Act
            var response = await printerController.UpdatePrinter(fakePrinterRequest) as BadRequestObjectResult;

            //Assert
            Assert.Equal(400, response.StatusCode);
        }
예제 #8
0
        public void GetPrinterTest()
        {
            Cleanup();

            const string PrinterName = "PrinterToGet";
            var          printer     = RegisterPrinter(PrinterName);

            var getRequest = new PrinterRequest {
                PrinterId = printer.Id
            };
            var client = new GoogleCloudPrintClient(OAuth2Provider, RefreshToken.Value);
            var p      = client.GetPrinterAsync(getRequest).Result;

            Assert.Equal(PrinterName, p.Printers[0].Name);
        }
예제 #9
0
        /// <summary>
        /// Adds a printer
        /// </summary>
        /// <param name="printerRequest"></param>
        /// <param name="facilityKey"></param>
        /// <returns></returns>
        public async Task AddPrinter(PrinterRequest printerRequest, Guid facilityKey)
        {
            var printerModel = await _printerModelRepository.GetAsync(printerRequest.PrinterModelKey);

            if (printerModel == null)
            {
                throw new InvalidPrinterException(Resource.ResourceManager.GetString($"E{ErrorCode.InvalidInput}"), ErrorCode.InvalidInput);
            }

            var printer = _mapper.Map <Models.Data.Printer>(printerRequest);
            var Id      = Guid.NewGuid();

            printer.PrinterKey  = Id;
            printer.FacilityKey = facilityKey;
            await _printerRepository.AddAsync(printer);

            _unitOfWork.CommitChanges();
        }
        public async Task UpdatePrinter_InvalidRequest_ShouldNotCommit()
        {
            //Arrange
            var guid = Guid.Parse("BF521211-CEAF-4DCA-82C7-40446D4C46ED");
            var fakePrinterRequest = new PrinterRequest();

            //Act
            try
            {
                await printerBusiness.UpdatePrinter(guid, guid, fakePrinterRequest);
            }
            //Assert

            catch (Exception ex)
            {
                _unitOfWork.Verify(x => x.CommitChanges(), Times.Never);
            }
        }
        public async Task AddPrinterKey_ValidRequest_ShouldCommit()
        {
            //Arrange
            var guid             = Guid.Parse("BF521211-CEAF-4DCA-82C7-40446D4C46ED");
            var fakeRequest      = new PrinterRequest();
            var fakeprintermodel = new SiteConfiguration.API.Printers.Models.Data.PrinterModel
            {
                PrinterModelKey = Guid.NewGuid(),
                DescriptionText = "testdescription"
            };

            _printerModelRepository.Setup(x => x.GetAsync(It.IsAny <Guid>())).ReturnsAsync(fakeprintermodel);

            //Act
            await printerBusiness.AddPrinter(fakeRequest, guid);

            //Assert
            _unitOfWork.Verify(x => x.CommitChanges(), Times.Once);
        }
예제 #12
0
        static void ListAndGetPrinter()
        {
            var client      = new GoogleCloudPrintClient(provider, token);
            var listRequest = new ListRequest {
                Proxy = proxy
            };
            var listResponse = client.ListPrinterAsync(listRequest).Result;

            if (listResponse.Printers != null && listResponse.Printers.Any())
            {
                for (int i = 0; i < listResponse.Printers.Count; i++)
                {
                    Console.WriteLine($"{i + 1}. {listResponse.Printers.ElementAt(i).DisplayName}");
                }
                int printerOption = -1;
                Console.Write("Please choose a printer to look for details: ");
                if (int.TryParse(Console.ReadLine(), out printerOption))
                {
                    var printer        = listResponse.Printers.ElementAt(printerOption - 1);
                    var printerRequest = new PrinterRequest {
                        PrinterId = printer.Id
                    };
                    var printerResponse = client.GetPrinterAsync(printerRequest).Result;
                    if (printerResponse.Printers != null && printerResponse.Printers.Any())
                    {
                        var thePrinter = printerResponse.Printers.ElementAt(0);
                        var message    = new StringBuilder()
                                         .AppendLine($"Printer: {thePrinter.Name}")
                                         .AppendLine($"Model: {thePrinter.Model}")
                                         .ToString();
                        Console.WriteLine(message);
                    }
                    else
                    {
                        Console.WriteLine("No relevant printer is found.");
                    }
                }
            }
            else
            {
                Console.WriteLine("There is no printer in the list");
            }
        }
예제 #13
0
        public async Task <IActionResult> AddPrinter([FromBody] PrinterRequest printer)
        {
            try
            {
                var facilityKey = Guid.Parse(_executionContextAccessor.Current.Facility.FacilityKey);
                _logger.LogInformation(string.Format(Constants.PostPrinterRequestReceived, facilityKey));
                await _printerBusiness.AddPrinter(printer, facilityKey);

                return(StatusCode(201));
            }
            catch (InvalidPrinterException invalidprinterexception)
            {
                _logger.LogError(invalidprinterexception.Message);
                return(BadRequest(new ErrorResponse(invalidprinterexception.Message, invalidprinterexception.HResult,
                                                    ResponsePayloadType.BusinessException)));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(StatusCode(500));
            }
        }
예제 #14
0
        /// <summary>
        /// update printer database
        /// </summary>
        /// <param name="key"></param>
        /// <param name="facilityKey"></param>
        /// <param name="printer"></param>
        /// <returns></returns>
        public async Task UpdatePrinter(Guid key, Guid facilityKey, PrinterRequest printer)
        {
            var printerModel = await _printerModelRepository.GetAsync(printer.PrinterModelKey);

            if (printerModel == null)
            {
                throw new InvalidPrinterException(Resource.ResourceManager.GetString($"E{ErrorCode.InvalidInput}"), ErrorCode.InvalidInput);
            }

            var dataModel =
                await _printerRepository.GetAsync(key);

            if (dataModel == null)
            {
                throw new InvalidPrinterException(Resource.ResourceManager.GetString($"E{ErrorCode.ResourceNotFound}"), ErrorCode.ResourceNotFound);
            }

            _mapper.Map(printer, dataModel);

            _printerRepository.Update(dataModel);
            _unitOfWork.CommitChanges();
        }
예제 #15
0
        public async Task <IActionResult> UpdatePrinter(PrinterRequest printer)
        {
            try
            {
                var key         = Guid.Parse(RouteData.Values["key"].ToString());
                var facilityKey = Guid.Parse(_executionContextAccessor.Current.Facility.FacilityKey);
                _logger.LogInformation(string.Format(Constants.PutPrinterRequestReceived, key));
                await _printerBusiness.UpdatePrinter(key, facilityKey, printer);

                return(Ok());
            }
            catch (InvalidPrinterException printerException)
            {
                _logger.LogError(printerException.Message);
                return(BadRequest(new ErrorResponse(printerException.Message, printerException.HResult,
                                                    ResponsePayloadType.BusinessException)));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(StatusCode(500));
            }
        }
예제 #16
0
        public List <PrinterModel> GetListPrinter(string StoreId, string AppKey, string AppSecret)
        {
            List <PrinterModel> model = new List <PrinterModel>();

            try
            {
                PrinterRequest paraBody = new PrinterRequest();
                paraBody.IsOnlyShowActiveItem = true;
                paraBody.StoreId   = StoreId;
                paraBody.AppKey    = AppKey;
                paraBody.AppSecret = AppSecret;
                NSLog.Logger.Info("GetListPrinter_Request: ", paraBody);
                var     result      = (ResponseBaseModels)ApiResponse.Post <ResponseBaseModels>(Commons.Printer_Get, null, paraBody);
                dynamic dataDynamic = result.Data;
                NSLog.Logger.Info("GetListPrinter_Response: ", result);
                var lstContent = JsonConvert.SerializeObject(dataDynamic["ListPrinter"]);
                model = JsonConvert.DeserializeObject <List <PrinterModel> >(lstContent);
            }
            catch (Exception ex)
            {
                NSLog.Logger.Info("GetListPrinter_False: ", ex);
            }
            return(model);
        }
예제 #17
0
        private static void SubmitJob()
        {
            var client      = new GoogleCloudPrintClient(provider, token);
            var listRequest = new ListRequest {
                Proxy = proxy
            };
            var listResponse = client.ListPrinterAsync(listRequest).Result;

            if (listResponse.Printers != null && listResponse.Printers.Any())
            {
                for (int i = 0; i < listResponse.Printers.Count; i++)
                {
                    Console.WriteLine($"{i + 1}. {listResponse.Printers.ElementAt(i).DisplayName}");
                }
                int printerOption = -1;
                Console.Write("Please choose a printer to submit job: ");
                if (int.TryParse(Console.ReadLine(), out printerOption))
                {
                    var printer        = listResponse.Printers.ElementAt(printerOption - 1);
                    var printerRequest = new PrinterRequest {
                        PrinterId = printer.Id
                    };
                    var printerResponse = client.GetPrinterAsync(printerRequest).Result;
                    if (printerResponse.Printers != null && printerResponse.Printers.Any())
                    {
                        Console.Write("Do you print from Url or a local document? (Y: Url, N: Local Document)");
                        bool isUrl = Console.ReadLine().ToLower().Contains("y");
                        Console.WriteLine("Please enter the path to the url/ the local document");
                        string path = Console.ReadLine();
                        var    cjt  = new CloudJobTicket
                        {
                            Print = new PrintTicketSection
                            {
                                Color = new ColorTicketItem {
                                    Type = Color.Type.STANDARD_MONOCHROME
                                },
                                Duplex = new DuplexTicketItem {
                                    Type = Duplex.Type.LONG_EDGE
                                },
                                PageOrientation = new PageOrientationTicketItem()
                                {
                                    Type = PageOrientation.Type.LANDSCAPE
                                },
                                Copies = new CopiesTicketItem()
                                {
                                    Copies = 3
                                }
                            }
                        };

                        JobResponse <SubmitRequest> response;
                        if (isUrl)
                        {
                            var request = new SubmitRequest
                            {
                                PrinterId = printer.Id,
                                Title     = Guid.NewGuid().ToString(),
                                Ticket    = cjt,
                                Content   = new SubmitFileLink(path)
                            };
                            response = client.SubmitJobAsync(request).Result;
                        }
                        else
                        {
                            using (var s = File.Open(path, FileMode.Open))
                            {
                                var request = new SubmitRequest()
                                {
                                    PrinterId = printer.Id,
                                    Title     = Path.GetFileNameWithoutExtension(path),
                                    Ticket    = cjt,
                                    Content   = new SubmitFileStream("text/plain", path, s)
                                };
                                response = client.SubmitJobAsync(request).Result;
                            }
                        }
                        Console.WriteLine("Success: {0}", response.Success);
                    }
                    else
                    {
                        Console.WriteLine("No relevant printer is found.");
                    }
                }
            }
            else
            {
                Console.WriteLine("There is no printer in the list");
            }
        }