Github action and create test case on other's repo
Published: 2021-11-19 21:24:39

For this lab, I needed to create a GitHub action for my SSG project and add a new test case for the other classmate's project. 
First, I worked on my SSG project first so that other classmates can add their test cases if needed. And I followed a lecture on how to create the GitHub action. [Creating GitHub action](https://github.com/suhhee1011/suhheeKim_OSD_release0.1_create_ssg/actions) was very straightforward and simple work. And while I am working on this, I noticed that I saw this when I was working on the external open-source projects and it was a bit annoying to me haha. However, now I know that how it works and it will prevent the crashing of my project. 
This is the github action that I created
```
# This workflow will do a clean install of node dependencies, cache/restore them, build the source code and run tests across different versions of node
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions

name: Node.js CI

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  build:

    runs-on: ubuntu-latest

    strategy:
      matrix:
        node-version: [12.x, 14.x, 16.x]
        # See supported Node.js release schedule at https://nodejs.org/en/about/releases/

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v2
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - name: run ci
    - run: npm ci
    - name: run test
    - run: npm run test
```

After that, I go to [Minsu's GitHub repository](https://github.com/mkim219/kimchi-ssg) and work on his SSG project. I chose it because I thought it is familiar to me. But I noticed that the project changed a lot. So I needed some time to read and understand his markdown instruction files. Once it runs, I start to look for the test cases that were missed. I found one part missed testing and it was validating metadata. So I added a test case to validate the Metadata function. And I pushed to my forked repository and [create a pull request](https://github.com/mkim219/kimchi-ssg/pull/31) on his main repository. However, it caused an error on formatter and eslint. So, I run the two commands to format it and pushed it again. And finally, GitHub action passed my pull request and Minsu merged it on his GitHub.
```
//In IWrapper.cs
string WrapGenerateInterporatedstring(string title, string style, string body, string meta)
        {
            return Helpers.GenerateInterporatedstring(title, style, body, meta);
        }

//In UnitTest.cs
        [Fact]
        public void GenerateMetaTest()
        {
            var mock = new Mock<IWrapper>();
            string title = "test";
            string style = "none";
            string body = "<div></div>";
            string meta = "ssg";

            // expected
            mock.Setup(x => x.WrapGenerateInterporatedstring(title, style, body, meta)).Returns(It.IsAny<string>());

            IWrapper obj = mock.Object;
            string result = obj.WrapGenerateInterporatedstring(title, style, body, meta);

            Assert.Equal(It.IsAny<string>(), result);
        }

```
And I saw his GitHub action page to check if my code runs well, even though he used a different language from me. The format of his Github action and my GitHub action seems similar. This is his Github action.
```
name: .NET

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 5.0.x
    - name: Install dependencies
      run: dotnet build ./kimchi-ssg/kimchi-ssg.csproj
    - name: Run Formatter & Linter
      run: |
        dotnet tool install --global dotnet-format --version 5.1.250
        dotnet-format --check --folder ./kimchi-ssg
    - name: Test
      run: dotnet test ./UnitTest/UnitTest.csproj
```

This lab doesn't take a long time but it gives enough experience to prevent me or others to crash on the project I can apply to my next real project.