Sunday, May 24, 2020

Todo app using SwiftUI

It's time again and I started learning the iOS programming again as SwiftUI looks cool.

I spent couple of weeks going through the swift programming documentation and watched the WWDC videos. 

Note: This is an ongoing blog, which I update as I add more features to my TodoApp.

Learning


Follow along the Swift documentation. Try to code along the examples. Just go through the documentation even if you don't understand the whole thing just try to read all the documentation and get yourself aware with the concepts. This is will help later while reading the code of some
open source project. 

And.. read the documentation again. This is what I am doing now, this time try to understand and repeat until it becomes muscle memory. this is ongoing process.

SwiftUI


Follow the SwiftUI tutorials and try to recreate them. 

Videos


One of my colleague suggested WWDC videos and watch them in the order. 


Blogs

After going through all those videos and tutorials, I have decided to start creating something. So what is first app everyone build, it's Todo app. 

iOS-TodosApp


Download the Github repo to follow along and try the completed features.

Features


  • Create a new Todo
  • Context menu to Complete or Delete a Todo
  • Show completed tasks
  • Add Priority
  • Add Date

Upcoming


  • Edit 
  • Persist the data
  • Add Notification
  • Add Location
  • Login functionality

Learnings while doing TodoApp

Thursday, March 19, 2020

Implementing Azure Ad B2C with MSAL.js in SPA with aspnetcore api

In the previous article Implicit Flow in SPA with Azure Ad I tried to learn how to use the Azure Ad Implicit flow to login to Single Page Application.

Azure AD B2C documentation on Microsoft is very elaborate and will take you through the steps from Creating a tenant in Azure to running an application.

Currently, you cannot create an Azure B2C tenant in Australia

If you have gone through the previous article, I had use MSAL.js in the client app to implement the login flow.

If you want to follow the steps you can refer the code hosted on Github AzureAd Samples under the SPA_B2C folder.

I have tried to implement only signup and sign-in flow.

If you follow the steps in the documentation you will have an Azure Ad B2c tenant and user flow to sign in and sign up a user.

you would need to create a .env.developement file next to the .env file in the root folder and update the following variables

REACT_APP_CLIENT_ID=
 REACT_APP_TENANT_ID= 
REACT_APP_TENANT_NAME= 
REACT_APP_SUSI_FLOW_ID= 

If you do not know about React environment variables have a read at Adding custom environment variables


Also, I am loading the SPA from the aspnet core web app. So in my case, the redirect URL in the app registration is https://localhost:44321, which can be found in the launchSettings.json

If you run the aspnet core web app and navigate to https://localhost:44321 on your favorite browser. you will see an empty page with a Sign-in button.


There are 2 flows that can be used


- Popup flow where a separate popup window will open to login
- Redirect flow

If you just check out the repo you will see the redirect flow and if you wanna see the popup action you need to be on the corresponding commit

There are some known issues with IE.

If everything is configured properly you should see your custom ui page after clicking the login button

You can hit sign up to register a new user.

Note: The order of the fields on the signup page will be what is set in the Page layouts in the Azure Ad B2C. If, you want to chage the order you can do in Azure



Also, you can set which fields are optional or not.

You will need a real email for verification. This is the first step in the registration process.

After you get the email with verification code you can finish the registration process.

If the user is created successfully and logged in you will see the next page in the app.


logout button does not work at the time when I am writing this article but it may be in when you are reading :)

Next article I will be doing how to access the API and get the weather summaries.

Cheers

Happy coding.







Thursday, March 12, 2020

Authentication and Authorization with Azure Ad using Implicit Flow and Security Groups

Authentication

The process of identifying is a process of identifying the identity of a person or process or device. This process identifies the end user and get the basic details about the user. This process only see if the user is who it is but has nothing to do with giving it access to the resources.

Authorization

Authorization is something that decide what part of the system or resources an end user can access based on their identity.

So, I want to know how these things are actually implemented in the real world.

Fow now, I am aware of Microsoft Identity Platform, Auth0 and Identity server.

I have started looking into MS Identity platform and how to implement these different Authentication flows in real world.

I am talking about real world implementations, so it is better to point you to the some code that I have started to write to get these implementations done.

As the title of the article says, I have use the Implicit flow to authenticate the user. AzureAdSamples is my GitHub repo that will eventually evolve to have most of these Authentication flows.

There not much to explain here if you follow the document in the github and try to run the app with the changes suggested in the Git document, you should be able to run this app and see the content.

Let me know if you face any issues.

Happy coding..

Sunday, September 8, 2019

Create React App Functional Automation Testing with Cypress

This post I am going to discuss about the new testing framework for testing, it is called Cypress and integrating the Cypress tests in CI pipeline.

I encourage you to go through how-to-works section of the website and get a brief idea of how it is different from existing framework like Selenium.

Setup 


Start with setting up your Create React App and Cypress following the blog code-create-react-app-v3-and-its-cypress-tests-using-typescript.

This will get you up and running with cypress and you app with Create React app and Typescript. I was using Azure DevOps for CI so I had to create a variable SKIP_PREFLIGHT_CHECK in my pipeline to make it work.



Writing Tests


If you have every written tests with mocha then you will find yourself in very familiar environment. Cypress has adopted mocha style syntax. Read about the bundled tools.

I am gonna give example of very simple tests. As, purpose of this article is to make you aware of things we can do in Cypress. 

describe('Should render', () => {

  it('Successfully loads', () => {
    cy.visit('/');
  });

  it('State Select', function () {
    cy.visit("/")
   
    cy.get('#select-name').should('be.visible')
  })
})

These 2 tests are testing if application loads successfully and my states select is rendered. 

I have configured my base url in the cypress.json file so that I do not have to type it again and again.

{
"baseUrl": "http://localhost:3000"
}

Running Tests


You can run Cypress tests using command npx cypress open from command line if you are using npm and have npx available. 

I have added scripts to start cypress when I am running locally or when I need to run t from CI. 

"scripts": {
"cypress:open": "cypress open",
"cypress:run": "cypress run",
"cypress:verify": "cypress verify",
"ci:cypress-run": "start-server-and-test start http://localhost:3000 cypress:run"
},

These are the tasks I have added in package.json to run cypress.

use cypress:open while doing locall development which open the Electron browser and watch the changes. So I can see my tests run while I am typing them. It is super fast.. I Love it.

cypress:run is used to run the tests from command line. 

cypress:verify is task added to verify that cypress is installed properly. 

CI/CD


You might have other tasks in the pipeline which will do you package restores versioning and builds. So once your code is built you want to run your tests. 

Here is how my pipeline looks like 

Build Pipeline
Build Pipeline

Once my build is successful I would want to verify cypress is installed properly.

Cypress Verify
Cypress Verify
Now that we know that cypress is installed properly and my actual step which will run the tests will fail only if there are tests failure and not because issue with cypress.

Note: In command line tasks you might have to change your working folder in the Advanced settings.

Now comes the part where we need to run the cypress tests. 

I am using a package start-server-and-test and it helps me start the server monitor the url and then run my tests in one script task.

Cypress run
If you see my script tasks

"scripts": {
   "cypress:run""cypress run",
   "cypress:verify""cypress verify",
   "ci:cypress-run""start-server-and-test start http://localhost:3000 cypress:run"
  },

ci:cypress-run task is the one that is responsible for running my tests. This task is running my create react script start task and monitoring the url and later run my tests. 

If you will run the command locally you will see that the recordings are saved in the Cypress/Videos folder. 

If your tests are run successfully you will see those great lines at the end of CI.





Thursday, June 13, 2019

Test Xamarin Forms app for Android 10 and iOS 13

Google and Apple have both released their new OS for mobile. Google with Android Q and Apple with iOS 13.  Have a quick look at the new features of iOS 13 and of Android Q.

I work on Xamarin Forms and I was eager to test my app on the new releases. So these steps are specific to Xamarin development with Visual Studio on Windows and Visual Studio for Mac.

Let's start with iOS.

iOS 13 Setup

To use the iOS 13 simulator, you would need to install xCode 11 beta. You can download this from the apple developer website. 

Once you install the XCode 11 beta you can configure the new simulators for iOS 13. 

If you open with Visual Studio it will not show you the iOS 13 simulators for your iOS project. To make them available, we would need to change the SDK to point to xCode-beta. To change the SDK location Goto Visual Studio - Preferences - Projects - SDK Locations - Apple and change the Xcode location to xCode 11 beta as shown in the image below. 


Apple SDK location

You will need to restart Visual Studio.