From 044cbe07f99ee13ddbc46ee957ae24fc48961165 Mon Sep 17 00:00:00 2001
From: HenryShan <zshan2@illinois.edu>
Date: Mon, 29 Mar 2021 23:38:34 +0800
Subject: [PATCH] assignment3.1 ver2.0: all functionalities are implemented,
 going for testing

---
 README.md                                    |  19 ++
 src/App.js                                   | 257 ++++++++++++--
 src/Components/Loading.js                    |   6 +-
 src/Components/Profile.js                    |  11 +-
 src/Components/Repo.js                       |   8 +-
 src/Components/Unfound.js                    |   4 +-
 src/__tests__/App-test.js                    |  24 ++
 src/__tests__/__snapshots__/App-test.js.snap | 335 ++++++++++++++++++-
 8 files changed, 617 insertions(+), 47 deletions(-)

diff --git a/README.md b/README.md
index 42eeedf..7ab5a6a 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,21 @@
 # sp21-cs242-assignment3
 
+Description: this repo is for UIUC CS242 SP21's assignment3
+
+## Functionalities:
+- Giving github's graphQL API endpoint address, user OAuth token, and username, get personal info of this user and rendered it in mobile devices.
+- Find other github user's info through following & follower lists and public repo owners.
+
+## Environment Requirement:
+- Windows 7 or above
+- Javascript Environment
+- React-Native
+
+## External Resources:
+- React Navigation
+- Jest
+
+## Update Notes:
+- 3/29: Basic functionalities are completed.
+- 3/22: User's personal info pages are completed.
+
diff --git a/src/App.js b/src/App.js
index fdc4270..32ca65a 100644
--- a/src/App.js
+++ b/src/App.js
@@ -6,6 +6,7 @@ import Loading from './Components/Loading'
 import Profile from './Components/Profile'
 import Repo from './Components/Repo'
 import Unfound from './Components/Unfound'
+import Users from './Components/Users'
 import DataGenerator from './Components/DataGenerator'
 
 const Stack = createStackNavigator();
@@ -23,6 +24,7 @@ const styles = StyleSheet.create({
 function generateData(route, navigation) {
   const {name, login, avatarUrl, bio, createdAt, email, websiteUrl, repositories} = route.params;
   const dataFile = {}
+  dataFile['login'] = login
   dataFile['navi'] = navigation
   dataFile['nameContent'] = 'Name: \n' + name
   dataFile['userNameContent'] = 'UserName\n: ' + login
@@ -44,11 +46,15 @@ function generateData(route, navigation) {
 
 /** Home page **/
 function HomeScreen({ navigation }) {
+  const dataJson = require('C:/Coding/cs242-assignment3/env.json')
+  const myUserName = dataJson['login']
+  const data = {}
+  data['login'] = myUserName
   return (
     <View style={styles.container}>
-      <ImageBackground source={require('C:/Coding/cs242-assignment3/GitView/assets/ice.jpg')} style={styles.image}>
+      <ImageBackground source={{uri: "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg"}} style={styles.image}>
       <View style={styles.viewStyleVertical}>
-        <Pressable  style={styles.pressableStyle} onPress={() => navigation.navigate('LoadingProfile')}>
+        <Pressable  style={styles.pressableStyle} onPress={() => navigation.push('LoadingProfile', data)}>
           <Text> Start </Text>
         </Pressable>
       </View>
@@ -67,29 +73,117 @@ function ProfileScreen({ route, navigation }) {
 
 /** Repo page **/
 function RepoScreen({ route, navigation }) {
-  const {nodes} = route.params
+  const user = route.params
+  const nodes = user['repositories']['nodes']
+  const login = user['login']
   let cards = [];
   for (let i = 0; i < nodes.length; i++) {
     var repoName = 'Repo name: \n' + nodes[i]['name'] + '\n'
     var repoDescription = 'Repo description: \n' + nodes[i]['description'] + '\n'
     var repoOwner = 'Repo owner: \n' + nodes[i]['owner']['login'] + '\n'
-    var nativeID = 'repo#' + i
+    var key = 'repo#' + i
     cards.push(
-    <View style={styles.textBox} nativeID={nativeID}>
+    <Pressable style={styles.textBox} key={key} Pressable style={styles.textBox} onPress={() => navigation.push('LoadingProfile', {login: nodes[i]['owner']['login']})}>
       <Text> {repoName} </Text>
       <Text> {repoDescription} </Text>
       <Text> {repoOwner} </Text>
-    </View>
+    </Pressable>
     )
   }
   const dataFile = {}
   dataFile['cards'] = cards
   dataFile['navi'] = navigation
+  dataFile['login'] = login
   return (
     <Repo data={dataFile}/>
   );
 }
 
+/** Follower page **/
+function FollowerScreen({ route, navigation }) {
+  const user = route.params
+  const nodes = user['followers']['nodes']
+  const login = user['login']
+  let cards = []
+  if (nodes.length === 0) {
+    cards.push(
+      <Pressable style={styles.textBox} key={'Nobody'}>
+          <Text style={{ fontSize: 30 }}> 
+            Oops! Nobody is in this list!
+          </Text> 
+      </Pressable>
+    )
+  } else {
+    for (let i = 0; i < nodes.length; i++) {
+      var name = 'Name: \n' + nodes[i]['name'] + '\n'
+      var userName = 'Github Username: \n' + nodes[i]['login'] + '\n'
+      var key = 'user#' + i
+      var avatarUrl = nodes[i]['avatarUrl']
+      cards.push(
+      <Pressable style={styles.textBox} key={key} onPress={()=>navigation.push('LoadingProfile', {login: nodes[i]['login']})}>
+        <View style={styles.viewStyleVertical}>
+          <Image style={{width:90, height:90}} source={{uri: avatarUrl}}/>
+        </View>
+        <View style={styles.viewStyleVertical}>
+          <Text> {name} </Text>
+          <Text> {userName} </Text>
+        </View>
+      </Pressable>
+      )
+    }
+  }
+  const dataFile = {}
+  dataFile['cards'] = cards
+  dataFile['navi'] = navigation
+  dataFile['login'] = login
+  console.log(login)
+  return (
+    <Users data={dataFile}/>
+  );
+}
+
+/** Following page **/
+function FollowingScreen({ route, navigation }) {
+  const user = route.params
+  const nodes = user['following']['nodes']
+  const login = user['login']
+  let cards = []
+  if (nodes.length === 0) {
+    cards.push(
+      <Pressable style={styles.textBox} key={'Nobody'}>
+          <Text style={{ fontSize: 30 }}> 
+            Oops! Nobody is in this list!
+          </Text> 
+      </Pressable>
+    )
+  } else {
+    for (let i = 0; i < nodes.length; i++) {
+      var name = 'Name: \n' + nodes[i]['name'] + '\n'
+      var userName = 'Github Username: \n' + nodes[i]['login'] + '\n'
+      var key = 'user#' + i
+      var avatarUrl = nodes[i]['avatarUrl']
+      cards.push(
+      <Pressable style={styles.textBox} key={key} onPress={()=>navigation.push('LoadingProfile', {login: nodes[i]['login']})}>
+        <View style={styles.viewStyleVertical}>
+          <Image style={{width:90, height:90}} source={{uri: avatarUrl}}/>
+        </View>
+        <View style={styles.viewStyleVertical}>
+          <Text> {name} </Text>
+          <Text> {userName} </Text>
+        </View>
+      </Pressable>
+      )
+    }
+  }
+  const dataFile = {}
+  dataFile['cards'] = cards
+  dataFile['navi'] = navigation
+  dataFile['login'] = login
+  return (
+    <Users data={dataFile}/>
+  );
+}
+
 /** Unfound page **/
 function UnfoundScreen({ route, navigation }) {
   const {errorMsg} = route.params
@@ -101,9 +195,12 @@ function UnfoundScreen({ route, navigation }) {
   );
 }
 
+
+
 /** Loading Profile page **/
-function LoadProfileScreen({navigation}) {
-  const dataJson = require('C:/Coding/cs242-assignment3/env.json');
+function LoadProfileScreen({route, navigation}) {
+  const dataJson = require('C:/Coding/cs242-assignment3/env.json')
+  const {login} = route.params
   fetch(dataJson['endPoint'], {
     method: 'POST',
     headers: {
@@ -113,7 +210,7 @@ function LoadProfileScreen({navigation}) {
     body: JSON.stringify({
       query: `
         query {
-          viewer {
+          user(login:"`+ login + `") {
             name
             login
             avatarUrl
@@ -133,11 +230,17 @@ function LoadProfileScreen({navigation}) {
   })
   .then(res => res.json())
   .then((data)=> {
-    navigation.navigate('Profile', data['data']['viewer'])
+    if (data['data']['user'] === null) {
+      /** User not found! **/
+      navigation.push('Unfound', {errorMsg: 'Wrong!'})
+      console.log('Error, cannot find the github user by the login username:' + login + ', maybe this is an organization!')
+    } else {
+      navigation.push('Profile', data['data']['user'])
+    }
   })
   .catch(error => {
     console.error('Error:', error)
-    navigation.navigate('Unfound', {errorMsg: error})
+    navigation.push('Unfound', {errorMsg: error})
   })
 
   return (
@@ -146,10 +249,8 @@ function LoadProfileScreen({navigation}) {
 }
 
 /** Loading Repo page **/
-function LoadRepoScreen({navigation}) {
-  // setTimeout(function(){
-  //   navigation.navigate('Unfound'); 
-  // }, 1000)
+function LoadRepoScreen({route, navigation}) {
+  const {login} = route.params
   const dataJson = require('C:/Coding/cs242-assignment3/env.json');
   fetch(dataJson['endPoint'], {
     method: 'POST',
@@ -160,7 +261,8 @@ function LoadRepoScreen({navigation}) {
     body: JSON.stringify({
       query: `
         query {
-          viewer{
+          user(login:"`+login+`"){
+            login
             repositories(last:100, privacy:PUBLIC){
               nodes{
                 name
@@ -176,14 +278,65 @@ function LoadRepoScreen({navigation}) {
     })
   })
   .then(res => res.json())
-  // .then((data) => console.log(data['data']['viewer']['repositories']['nodes']))
-  // .then((data) => console.log(data))
   .then((data)=> {
-    navigation.navigate('Repo', data['data']['viewer']['repositories'])
+    if (data['data']['user'] === null) {
+      /** User not found! **/
+      navigation.push('Unfound', {errorMsg: 'Wrong!'})
+      console.log('Error, cannot find the github user by the login username:' + login + ', maybe this is an organization!')
+    } else {
+      navigation.push('Repo', data['data']['user'])
+    }
+  })
+  .catch(error => {
+    console.error('Error:', error)
+    navigation.push('Unfound', {errorMsg: error})
+  })
+
+  return (
+    <Loading/>
+  );
+}
+
+/** Loading Followers page **/
+function LoadFollowersScreen({route, navigation}) {
+  const {login} = route.params
+  const dataJson = require('C:/Coding/cs242-assignment3/env.json');
+  fetch(dataJson['endPoint'], {
+    method: 'POST',
+    headers: {
+      "Content-Type": "application/json",
+      "Authorization": dataJson['token']
+    },
+    body: JSON.stringify({
+      query: `
+        query {
+          user(login:"`+ login +`"){
+            login
+            followers(last:100) {
+              nodes {
+                name
+                login
+                avatarUrl
+              }
+            }
+          }
+        }
+      `
+    })
+  })
+  .then(res => res.json())
+  .then((data)=> {
+    if (data['data']['user'] === null) {
+      /** User not found! **/
+      navigation.push('Unfound', {errorMsg: 'Wrong!'})
+      console.log('Error, cannot find the github user by the login username:' + login + ', maybe this is an organization!')
+    } else {
+      navigation.push('Followers', data['data']['user'])
+    }
   })
   .catch(error => {
     console.error('Error:', error)
-    navigation.navigate('Unfound', {errorMsg: error})
+    navigation.push('Unfound', {errorMsg: error})
   })
 
   return (
@@ -191,17 +344,69 @@ function LoadRepoScreen({navigation}) {
   );
 }
 
+/** Loading Followings page **/
+function LoadFollowingScreen({route, navigation}) {
+  const {login} = route.params
+  const dataJson = require('C:/Coding/cs242-assignment3/env.json');
+  fetch(dataJson['endPoint'], {
+    method: 'POST',
+    headers: {
+      "Content-Type": "application/json",
+      "Authorization": dataJson['token']
+    },
+    body: JSON.stringify({
+      query: `
+        query {
+          user(login:"` + login + `"){
+            login
+            following(last:100) {
+              nodes {
+                name
+                login
+                avatarUrl
+              }
+            }
+          }
+        }
+      `
+    })
+  })
+  .then(res => res.json())
+  .then((data)=> {
+    if (data['data']['user'] === null) {
+      /** User not found! **/
+      navigation.push('Unfound', {errorMsg: 'Wrong!'})
+      console.log('Error, cannot find the github user by the login username:' + login + ', maybe this is an organization!')
+    } else {
+      navigation.push('Following', data['data']['user'])
+    }
+  })
+  .catch(error => {
+    console.error('Error:', error)
+    navigation.push('Unfound', {errorMsg: error})
+  })
+
+  return (
+    <Loading/>
+  );
+}
+
+
 /** Page loader **/
 function App() {
   return (
     <NavigationContainer>
       <Stack.Navigator initialRouteName="Home">
-        <Stack.Screen name="Home" component={HomeScreen} options={{ title: 'Github User Info' }}/>
-        <Stack.Screen name="Profile" component={ProfileScreen} />
-        <Stack.Screen name="Repo" component={RepoScreen} options={{ title: 'Repositories' }}/>
-        <Stack.Screen name="LoadingProfile" component={LoadProfileScreen} />
-        <Stack.Screen name="LoadingRepo" component={LoadRepoScreen} />
-        <Stack.Screen name="Unfound" component={UnfoundScreen} options={{ title: 'Error' }}/>
+        <Stack.Screen name='Home' component={HomeScreen} options={{ title: 'Github User Info', animationEnabled: true}}/>
+        <Stack.Screen name='Profile' component={ProfileScreen} options={{animationEnabled: true}}/>
+        <Stack.Screen name='Repo' component={RepoScreen} options={{ title: 'Repositories', animationEnabled:true }}/>
+        <Stack.Screen name="LoadingProfile" component={LoadProfileScreen} options={{animationEnabled: true}} />
+        <Stack.Screen name='LoadingRepo' component={LoadRepoScreen} options={{animationEnabled: true}}/>
+        <Stack.Screen name='Unfound' component={UnfoundScreen} options={{ title: 'Error', animationEnabled:true }}/>
+        <Stack.Screen name='LoadingFollowers' component={LoadFollowersScreen} options={{animationEnabled: true}}/> 
+        <Stack.Screen name='LoadingFollowing' component={LoadFollowingScreen} options={{animationEnabled: true}}/>
+        <Stack.Screen name='Followers' component={FollowerScreen} options={{animationEnabled: true}}/>
+        <Stack.Screen name='Following' component={FollowingScreen} options={{animationEnabled: true}}/>
       </Stack.Navigator>
     </NavigationContainer>
   );
diff --git a/src/Components/Loading.js b/src/Components/Loading.js
index 2e3ee0c..694ff72 100644
--- a/src/Components/Loading.js
+++ b/src/Components/Loading.js
@@ -13,13 +13,13 @@ const styles = StyleSheet.create({
 });
 
 const Loading = () => {
-    const pic = require('C:/Coding/cs242-assignment3/GitView/assets/loading.png')
+    const pic = "http://simpleicon.com/wp-content/uploads/refresh.png"
     return (
         <View style={styles.container}>
-            <ImageBackground source={require('C:/Coding/cs242-assignment3/GitView/assets/ice.jpg')} style={styles.image}>
+            <ImageBackground source={{uri: "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg"}} style={styles.image}>
             <View style={styles.viewStyleVertical}>
                 <Text style={{ fontSize: 30 }}>Loading......</Text>
-                <Image source={pic} style={{width: 200, height: 200}}/>
+                <Image source={{uri: pic}} style={{width: 200, height: 200}}/>
             </View>
             </ImageBackground>
         </View>
diff --git a/src/Components/Profile.js b/src/Components/Profile.js
index a6d95f8..2856a2d 100644
--- a/src/Components/Profile.js
+++ b/src/Components/Profile.js
@@ -25,18 +25,19 @@ const Profile = (props) => {
     const createDate = file['createDate']
     const repoCount = file['repoCount']
     const navigation = file['navi']
+    const login = file['login']
     return (
         <View style={styles.container}>
-            <ImageBackground source={require('C:/Coding/cs242-assignment3/GitView/assets/ice.jpg')} style={styles.image}> 
+            <ImageBackground source={{uri: "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg"}} style={styles.image}> 
             <View style={styles.viewStyleVertical}>
                 <View style={styles.viewStyleVertical}> 
-                <Image style={{width: 100, height: 100}} source={iconUrl} />
+                <Image style={{width: 100, height: 100}} source={{uri: iconUrl}} />
                 </View>
                 <View style={styles.viewStyleHorizon}> 
-                <Pressable style={styles.pressableStyle}> 
+                <Pressable style={styles.pressableStyle} onPress={() => navigation.push('LoadingFollowers', {login: login})}> 
                     <Text> Followers </Text>
                 </Pressable>
-                <Pressable style={styles.pressableStyle}>
+                <Pressable style={styles.pressableStyle} onPress={() => navigation.push('LoadingFollowing', {login: login})}>
                     <Text> Followings </Text>
                 </Pressable>
                 </View>
@@ -49,7 +50,7 @@ const Profile = (props) => {
                 <Text style={styles.textBox}> {createDate} </Text>
                 </View>
                 <View style={styles.viewStyleVertical} > 
-                <Pressable  style={styles.pressableStyle} onPress={() => navigation.navigate('LoadingRepo')}> 
+                <Pressable  style={styles.pressableStyle} onPress={() => navigation.push('LoadingRepo', {login: login})}> 
                     <Text> {repoCount} </Text>
                 </Pressable>
                 </View>
diff --git a/src/Components/Repo.js b/src/Components/Repo.js
index 05b44e6..811276f 100644
--- a/src/Components/Repo.js
+++ b/src/Components/Repo.js
@@ -18,12 +18,16 @@ const Repo = (props) => {
     const file = props.data
     const cards = file['cards']
     const navigation = file['navi']
+    const login = file['login']
     return (
         <View style={styles.container}>
-            <ImageBackground source={require('C:/Coding/cs242-assignment3/GitView/assets/ice.jpg')} style={styles.image}>
+            <ImageBackground source={{uri: "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg"}} style={styles.image}>
             <View style={styles.viewStyleVertical}>
+                <Pressable  style={styles.pressableStyle} onPress={() => navigation.pop(2)}>
+                <Text> Go to Profile </Text>
+                </Pressable>
                 {cards}
-                <Pressable  style={styles.pressableStyle} onPress={() => navigation.navigate('Profile')}>
+                <Pressable  style={styles.pressableStyle} onPress={() => navigation.pop(2)}>
                 <Text> Go to Profile </Text>
                 </Pressable>
             </View>
diff --git a/src/Components/Unfound.js b/src/Components/Unfound.js
index 1bfc4a9..6b3772a 100644
--- a/src/Components/Unfound.js
+++ b/src/Components/Unfound.js
@@ -19,10 +19,10 @@ const Unfound = (props) => {
     const navigation = dataFile['navi']
     return (
         <View style={styles.container}>
-            <ImageBackground source={require('C:/Coding/cs242-assignment3/GitView/assets/ice.jpg')} style={styles.image}>
+            <ImageBackground source={{uri: "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg"}} style={styles.image}>
             <View style={styles.viewStyleVertical}>
                 <Text style={{ fontSize: 30 }}> Error! Check log to see details </Text>
-                <Image style={{width: 200, height: 200}} source={require('C:/Coding/cs242-assignment3/GitView/assets/warn.png')} />
+                <Image style={{width: 200, height: 200}} source={{uri: "https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Warning.svg/156px-Warning.svg.png"}} />
                 <Pressable  style={styles.pressableStyle} onPress={() => navigation.navigate('Home')}> 
                 <Text> Go back to Home Page </Text>
                 </Pressable>
diff --git a/src/__tests__/App-test.js b/src/__tests__/App-test.js
index 79c4721..f76ba57 100644
--- a/src/__tests__/App-test.js
+++ b/src/__tests__/App-test.js
@@ -11,6 +11,7 @@ import Unfound from '../Components/Unfound';
 
 const Stack = createStackNavigator();
 
+/** Testing all loading pages */
 test('renders correctly', () => {
     const tree = renderer.create(
       <Loading />
@@ -36,6 +37,7 @@ test('renders correctly', () => {
     expect(tree).toMatchSnapshot();
   });
 
+  /** Testing repo pages */
   test('renders correctly', ({navigation}) => {
     const dataFile = {
       iconUrl: "https://avatars.githubusercontent.com/u/42978932?u=b4a7beb2752bb6059cd13d12ca26d097767abf77&v=4",
@@ -54,6 +56,28 @@ test('renders correctly', () => {
     expect(tree).toMatchSnapshot();
   });
 
+
+  /** Testing all Users pages (Followers and Following) */
+  test('renders correctly', ({navigation}) => {
+    const dataFile = {
+      iconUrl: "https://avatars.githubusercontent.com/u/42978932?u=b4a7beb2752bb6059cd13d12ca26d097767abf77&v=4",
+      nameContent: null,
+      userNameContent: null,
+      bioContent: null,
+      websiteLink: null,
+      emailContent: null,
+      createData: null,
+      repoCount: 0,
+      navi: navigation
+    }
+    const tree = renderer.create(
+      <Users data={dataFile}/>
+    ).toJSON();
+    expect(tree).toMatchSnapshot();
+  });
+
+  
+  /** Testing unfound/error pages */
   test('renders correctly', ({navigation}) => {
     const dataFile = {
       navi: navigation
diff --git a/src/__tests__/__snapshots__/App-test.js.snap b/src/__tests__/__snapshots__/App-test.js.snap
index 365ee0e..3f7171f 100644
--- a/src/__tests__/__snapshots__/App-test.js.snap
+++ b/src/__tests__/__snapshots__/App-test.js.snap
@@ -19,7 +19,88 @@ exports[`renders correctly 1`] = `
     }
   >
     <Image
-      source="test-file-stub"
+      source={
+        Object {
+          "uri": "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg",
+        }
+      }
+      style={
+        Array [
+          Object {
+            "bottom": 0,
+            "left": 0,
+            "position": "absolute",
+            "right": 0,
+            "top": 0,
+          },
+          Object {
+            "height": undefined,
+            "width": undefined,
+          },
+          undefined,
+        ]
+      }
+    />
+    <View
+      style={
+        Object {
+          "alignItems": "center",
+          "justifyContent": "center",
+          "margin": "10%",
+        }
+      }
+    >
+      <Text
+        style={
+          Object {
+            "fontSize": 30,
+          }
+        }
+      >
+        Loading......
+      </Text>
+      <Image
+        source={
+          Object {
+            "uri": "http://simpleicon.com/wp-content/uploads/refresh.png",
+          }
+        }
+        style={
+          Object {
+            "height": 200,
+            "width": 200,
+          }
+        }
+      />
+    </View>
+  </View>
+</View>
+`;
+
+exports[`renders correctly 2`] = `
+<View
+  style={
+    Object {
+      "flex": 1,
+    }
+  }
+>
+  <View
+    accessibilityIgnoresInvertColors={true}
+    style={
+      Object {
+        "flex": 1,
+        "justifyContent": "center",
+        "resizeMode": "cover",
+      }
+    }
+  >
+    <Image
+      source={
+        Object {
+          "uri": "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg",
+        }
+      }
       style={
         Array [
           Object {
@@ -56,7 +137,7 @@ exports[`renders correctly 1`] = `
         }
       >
         <Image
-          source="test-file-stub"
+          source="https://avatars.githubusercontent.com/u/42978932?u=b4a7beb2752bb6059cd13d12ca26d097767abf77&v=4"
           style={
             Object {
               "height": 100,
@@ -164,7 +245,8 @@ exports[`renders correctly 1`] = `
             }
           }
         >
-           nameContent 
+           
+           
         </Text>
         <Text
           style={
@@ -182,7 +264,8 @@ exports[`renders correctly 1`] = `
             }
           }
         >
-           userNameContent 
+           
+           
         </Text>
         <Text
           style={
@@ -200,7 +283,8 @@ exports[`renders correctly 1`] = `
             }
           }
         >
-           bioContent 
+           
+           
         </Text>
         <Text
           style={
@@ -218,7 +302,8 @@ exports[`renders correctly 1`] = `
             }
           }
         >
-           websiteLink 
+           
+           
         </Text>
         <Text
           style={
@@ -236,7 +321,8 @@ exports[`renders correctly 1`] = `
             }
           }
         >
-           emailContent 
+           
+           
         </Text>
         <Text
           style={
@@ -254,7 +340,8 @@ exports[`renders correctly 1`] = `
             }
           }
         >
-           createDate 
+           
+           
         </Text>
       </View>
       <View
@@ -295,7 +382,9 @@ exports[`renders correctly 1`] = `
           }
         >
           <Text>
-             repoCount 
+             
+            0
+             
           </Text>
         </View>
       </View>
@@ -303,3 +392,231 @@ exports[`renders correctly 1`] = `
   </View>
 </View>
 `;
+
+exports[`renders correctly 3`] = `
+<View
+  style={
+    Object {
+      "flex": 1,
+    }
+  }
+>
+  <View
+    accessibilityIgnoresInvertColors={true}
+    style={
+      Object {
+        "flex": 1,
+        "justifyContent": "center",
+        "resizeMode": "cover",
+      }
+    }
+  >
+    <Image
+      source={
+        Object {
+          "uri": "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg",
+        }
+      }
+      style={
+        Array [
+          Object {
+            "bottom": 0,
+            "left": 0,
+            "position": "absolute",
+            "right": 0,
+            "top": 0,
+          },
+          Object {
+            "height": undefined,
+            "width": undefined,
+          },
+          undefined,
+        ]
+      }
+    />
+    <View
+      style={
+        Object {
+          "alignItems": "center",
+          "justifyContent": "center",
+          "margin": "10%",
+        }
+      }
+    >
+      <View
+        accessible={true}
+        focusable={true}
+        onBlur={[Function]}
+        onClick={[Function]}
+        onFocus={[Function]}
+        onResponderGrant={[Function]}
+        onResponderMove={[Function]}
+        onResponderRelease={[Function]}
+        onResponderTerminate={[Function]}
+        onResponderTerminationRequest={[Function]}
+        onStartShouldSetResponder={[Function]}
+        style={
+          Object {
+            "backgroundColor": "lavender",
+            "borderColor": "thistle",
+            "borderRadius": 5,
+            "borderWidth": 2,
+            "flex": 1,
+            "flexDirection": "row",
+            "justifyContent": "space-between",
+            "marginHorizontal": 10,
+            "marginTop": 10,
+            "paddingHorizontal": 20,
+            "paddingVertical": 10,
+          }
+        }
+      >
+        <Text>
+           Go to Profile 
+        </Text>
+      </View>
+      <View
+        accessible={true}
+        focusable={true}
+        onBlur={[Function]}
+        onClick={[Function]}
+        onFocus={[Function]}
+        onResponderGrant={[Function]}
+        onResponderMove={[Function]}
+        onResponderRelease={[Function]}
+        onResponderTerminate={[Function]}
+        onResponderTerminationRequest={[Function]}
+        onStartShouldSetResponder={[Function]}
+        style={
+          Object {
+            "backgroundColor": "lavender",
+            "borderColor": "thistle",
+            "borderRadius": 5,
+            "borderWidth": 2,
+            "flex": 1,
+            "flexDirection": "row",
+            "justifyContent": "space-between",
+            "marginHorizontal": 10,
+            "marginTop": 10,
+            "paddingHorizontal": 20,
+            "paddingVertical": 10,
+          }
+        }
+      >
+        <Text>
+           Go to Profile 
+        </Text>
+      </View>
+    </View>
+  </View>
+</View>
+`;
+
+exports[`renders correctly 4`] = `
+<View
+  style={
+    Object {
+      "flex": 1,
+    }
+  }
+>
+  <View
+    accessibilityIgnoresInvertColors={true}
+    style={
+      Object {
+        "flex": 1,
+        "justifyContent": "center",
+        "resizeMode": "cover",
+      }
+    }
+  >
+    <Image
+      source={
+        Object {
+          "uri": "https://www.fonewalls.com/wp-content/uploads/2020/04/Ice-Phone-Wallpaper.jpg",
+        }
+      }
+      style={
+        Array [
+          Object {
+            "bottom": 0,
+            "left": 0,
+            "position": "absolute",
+            "right": 0,
+            "top": 0,
+          },
+          Object {
+            "height": undefined,
+            "width": undefined,
+          },
+          undefined,
+        ]
+      }
+    />
+    <View
+      style={
+        Object {
+          "alignItems": "center",
+          "justifyContent": "center",
+          "margin": "10%",
+        }
+      }
+    >
+      <Text
+        style={
+          Object {
+            "fontSize": 30,
+          }
+        }
+      >
+         Error! Check log to see details 
+      </Text>
+      <Image
+        source={
+          Object {
+            "uri": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/17/Warning.svg/156px-Warning.svg.png",
+          }
+        }
+        style={
+          Object {
+            "height": 200,
+            "width": 200,
+          }
+        }
+      />
+      <View
+        accessible={true}
+        focusable={true}
+        onBlur={[Function]}
+        onClick={[Function]}
+        onFocus={[Function]}
+        onResponderGrant={[Function]}
+        onResponderMove={[Function]}
+        onResponderRelease={[Function]}
+        onResponderTerminate={[Function]}
+        onResponderTerminationRequest={[Function]}
+        onStartShouldSetResponder={[Function]}
+        style={
+          Object {
+            "backgroundColor": "lavender",
+            "borderColor": "thistle",
+            "borderRadius": 5,
+            "borderWidth": 2,
+            "flex": 1,
+            "flexDirection": "row",
+            "justifyContent": "space-between",
+            "marginHorizontal": 10,
+            "marginTop": 10,
+            "paddingHorizontal": 20,
+            "paddingVertical": 10,
+          }
+        }
+      >
+        <Text>
+           Go back to Home Page 
+        </Text>
+      </View>
+    </View>
+  </View>
+</View>
+`;
-- 
GitLab