Skip to content

Commit

Permalink
LoginPage: Firebase auth UI
Browse files Browse the repository at this point in the history
  • Loading branch information
devinshoemaker committed Jul 24, 2019
1 parent 8ed1b48 commit e246f68
Show file tree
Hide file tree
Showing 6 changed files with 78 additions and 4 deletions.
3 changes: 3 additions & 0 deletions angular.json
Expand Up @@ -40,6 +40,9 @@
},
{
"input": "src/app/app.scss"
},
{
"input": "./node_modules/firebaseui/dist/firebaseui.css"
}
],
"scripts": [],
Expand Down
38 changes: 38 additions & 0 deletions cypress/integration/login.spec.js
@@ -0,0 +1,38 @@
/// <reference types="Cypress" />

context('Home Page', () => {
beforeEach(() => {
cy.visit('/login')
});

it('should have title', () => {
cy.get('ion-title').should('contain', 'Login');
});

it('should have Google sign in button', () => {
let googleSignInButton = cy.get('.firebaseui-idp-google');
googleSignInButton.should('contain', 'Sign in with Google');
googleSignInButton.click();
});

it('should have email sign in button', () => {
let emailSignInButton = cy.get('.firebaseui-idp-password');
emailSignInButton.should('contain', 'Sign in with email');
emailSignInButton.click();

cy.get('.firebaseui-id-email').type('e2e@test.com');
cy.get('.firebaseui-id-submit').click();
cy.get('.firebaseui-id-password').type('cypress');
cy.get('.firebaseui-id-submit').click();

cy.url().should('eq', 'http://localhost:8100/home');
});

it('should have anonymous sign in button', () => {
let continueAsGuestButton = cy.get('.firebaseui-idp-anonymous');
continueAsGuestButton.should('contain', 'Continue as guest');
continueAsGuestButton.click();

cy.url().should('eq', 'http://localhost:8100/home');
});
});
4 changes: 3 additions & 1 deletion src/app/app.module.ts
Expand Up @@ -3,6 +3,7 @@ import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { AngularFireModule } from '@angular/fire';
import { AngularFireAuthModule } from '@angular/fire/auth';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
Expand All @@ -20,7 +21,8 @@ import { environment } from 'src/environments/environment';
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
AngularFireModule.initializeApp(environment.firebase)
AngularFireModule.initializeApp(environment.firebase),
AngularFireAuthModule
],
providers: [
StatusBar,
Expand Down
4 changes: 2 additions & 2 deletions src/app/login/login.page.html
@@ -1,9 +1,9 @@
<ion-header>
<ion-toolbar>
<ion-title>login</ion-title>
<ion-title>Login</ion-title>
</ion-toolbar>
</ion-header>

<ion-content>
<ion-content id="firebaseui-auth-container">

</ion-content>
11 changes: 11 additions & 0 deletions src/app/login/login.page.spec.ts
Expand Up @@ -2,15 +2,26 @@ import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';

import { LoginPage } from './login.page';
import { AngularFireAuth } from '@angular/fire/auth';
import { environment } from 'src/environments/environment';

describe('LoginPage', () => {
let component: LoginPage;
let fixture: ComponentFixture<LoginPage>;

const angularFireAuthStub = {
auth: {
app: {
options: environment.firebase
}
}
};

beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ LoginPage ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
providers: [ { provide: AngularFireAuth, useValue: angularFireAuthStub } ]
})
.compileComponents();
}));
Expand Down
22 changes: 21 additions & 1 deletion src/app/login/login.page.ts
@@ -1,4 +1,10 @@
import { Component, OnInit } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/auth';

import * as firebase from 'firebase/app';
import 'firebase/auth';

import * as firebaseui from 'firebaseui';

@Component({
selector: 'app-login',
Expand All @@ -7,9 +13,23 @@ import { Component, OnInit } from '@angular/core';
})
export class LoginPage implements OnInit {

constructor() { }
constructor(private afAuth: AngularFireAuth) { }

ngOnInit() {
// FirebaseUI config.
const uiConfig = {
signInSuccessUrl: '/home',
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,
firebase.auth.EmailAuthProvider.PROVIDER_ID,
firebaseui.auth.AnonymousAuthProvider.PROVIDER_ID
]
};

// Initialize the FirebaseUI Widget using Firebase.
const ui = new firebaseui.auth.AuthUI(this.afAuth.auth);
// // The start method will wait until the DOM is loaded.
ui.start('#firebaseui-auth-container', uiConfig);
}

}

0 comments on commit e246f68

Please sign in to comment.