Skip to content

Commit 6100f66

Browse files
author
blackmarllbor0
committed
slightly revised the structure, and also added the creation of a local git repository. We need to finalise tests for it
1 parent d92109c commit 6100f66

File tree

10 files changed

+99
-14
lines changed

10 files changed

+99
-14
lines changed

cmd/create-project-struct.go

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,25 @@ package main
22

33
import (
44
"github.com/blackmarllboro/create-project-struct/internal/app/dir"
5+
"github.com/blackmarllboro/create-project-struct/internal/app/file"
6+
"github.com/blackmarllboro/create-project-struct/internal/pkg/args"
7+
"github.com/blackmarllboro/create-project-struct/internal/pkg/git"
8+
"github.com/blackmarllboro/create-project-struct/internal/pkg/log"
59

6-
"github.com/charmbracelet/log"
10+
l "github.com/charmbracelet/log"
711
)
812

913
func main() {
10-
logger := log.New()
14+
logger := log.NewLogger(l.New())
1115

12-
project := dir.NewDirs()
16+
project := dir.NewDirs(file.NewFile(), args.ProjectName{})
1317
if err := project.CreateProject(); err != nil {
1418
logger.Error(err)
1519
}
1620

21+
if err := git.CreateLocalGitRepository(args.ProjectName{}); err != nil {
22+
logger.Error(err)
23+
}
24+
1725
logger.Info("the project dir has been successfully created")
1826
}

internal/app/dir/dir.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package dir
33
import (
44
"errors"
55
"fmt"
6+
"github.com/blackmarllboro/create-project-struct/internal/pkg/args"
67
"os"
78
"path"
89

910
"github.com/blackmarllboro/create-project-struct/internal/app/file"
10-
"github.com/blackmarllboro/create-project-struct/internal/pkg/args"
1111
)
1212

1313
const perm = 0755 // Access rights to create folders
@@ -25,10 +25,11 @@ type Dirs struct {
2525
projectName string
2626
isCurrentDir bool
2727
file *file.File
28+
name args.GetProjectName
2829
}
2930

30-
func NewDirs() *Dirs {
31-
return &Dirs{file: file.NewFile()}
31+
func NewDirs(f *file.File, p args.ProjectName) *Dirs {
32+
return &Dirs{file: f, name: p}
3233
}
3334

3435
func (d *Dirs) CreateProject() error {
@@ -44,7 +45,7 @@ func (d *Dirs) CreateProject() error {
4445
}
4546

4647
func (d *Dirs) createProjectDir() error {
47-
projectDir, currentDir, err := args.GetProjectName()
48+
projectDir, currentDir, err := d.name.GetProjectName()
4849
d.projectName = path.Base(projectDir)
4950
d.isCurrentDir = currentDir
5051
if err != nil {

internal/pkg/args/args.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ import (
55
"os"
66
)
77

8+
type ProjectName struct{}
9+
810
// GetProjectName function for getting the project name. The name is specified
911
// via a command line argument. Set the argument "." to create a project in the
1012
// current directory. Boolean value returns true if the application is created in
1113
// the current directory.
12-
func GetProjectName() (string, bool, error) {
14+
func (p ProjectName) GetProjectName() (string, bool, error) {
1315
if len(os.Args) < 2 {
1416
return "", false, errors.New("the project name has not been transferred")
1517
}

internal/pkg/args/interface.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package args
2+
3+
type GetProjectName interface {
4+
GetProjectName() (string, bool, error)
5+
}

internal/pkg/args/tests/args_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ import (
88
)
99

1010
func TestGetProjectName(t *testing.T) {
11+
projName := args.ProjectName{}
12+
1113
t.Log("no project name provided")
1214
{
13-
projectName, _, err := args.GetProjectName()
15+
projectName, _, err := projName.GetProjectName()
1416
if err != nil {
1517
t.Fatalf("Expected an error, got nil")
1618
}
@@ -23,7 +25,7 @@ func TestGetProjectName(t *testing.T) {
2325
t.Log("projectName is \".\"")
2426
{
2527
os.Args = []string{"cmd", "."}
26-
projectName, isCurrentDir, err := args.GetProjectName()
28+
projectName, isCurrentDir, err := projName.GetProjectName()
2729
if err != nil {
2830
t.Fatalf("Expected an error, got nil")
2931
}
@@ -46,7 +48,7 @@ func TestGetProjectName(t *testing.T) {
4648
{
4749
testProjectName := "test_project"
4850
os.Args = []string{"cmd", testProjectName}
49-
projectName, isCurrentDir, err := args.GetProjectName()
51+
projectName, isCurrentDir, err := projName.GetProjectName()
5052
if err != nil {
5153
t.Fatalf("Expected an error, got nil")
5254
}

internal/pkg/git/git.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,25 @@
11
package git
22

33
import (
4+
"fmt"
5+
"github.com/blackmarllboro/create-project-struct/internal/pkg/args"
6+
"os"
47
"os/exec"
58
)
69

7-
func CreateLocalGitRepository() error {
8-
cmd := exec.Command("git", "init")
10+
func CreateLocalGitRepository(projectName args.GetProjectName) error {
11+
name, isCurrentDir, err := projectName.GetProjectName()
12+
if err != nil {
13+
return err
14+
}
915

16+
if !isCurrentDir {
17+
if err := os.Chdir(fmt.Sprintf("./%s", name)); err != nil {
18+
return err
19+
}
20+
}
21+
22+
cmd := exec.Command("git", "init")
1023
if err := cmd.Run(); err != nil {
1124
return err
1225
}

internal/pkg/git/tests/git_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package tests
2+
3+
import (
4+
"github.com/blackmarllboro/create-project-struct/internal/pkg/git"
5+
"github.com/blackmarllboro/create-project-struct/internal/pkg/git/tests/mock"
6+
7+
"os"
8+
"testing"
9+
)
10+
11+
// TODO we need to figure out how to create and navigate to the test dirs.
12+
func TestCreateLocalGitRepository_CurrentDir(t *testing.T) {
13+
if err := os.Mkdir(mock.TestDir, 0755); err != nil {
14+
t.Fatalf("Failed to create test directory: %v", err)
15+
}
16+
defer os.RemoveAll(mock.TestDir)
17+
18+
if err := os.Chdir(mock.TestDir); err != nil {
19+
t.Fatalf("Expected no error, but got: %s", err)
20+
}
21+
22+
if err := git.CreateLocalGitRepository(mock.IsCurrentDirIsTrue{}); err != nil {
23+
t.Fatalf("Expected no error, but got: %s", err)
24+
}
25+
26+
_, err := os.Stat(mock.TestDir)
27+
if os.IsNotExist(err) {
28+
t.Fatal(".git directory not found in the expected location")
29+
}
30+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package mock
2+
3+
type IsCurrentDirIsFalse struct{}
4+
5+
const TestDir = "test_dir"
6+
7+
func (i IsCurrentDirIsFalse) GetProjectName() (string, bool, error) {
8+
return TestDir, false, nil
9+
}
10+
11+
type IsCurrentDirIsTrue struct{}
12+
13+
func (i IsCurrentDirIsTrue) GetProjectName() (string, bool, error) {
14+
return TestDir, false, nil
15+
}

internal/interfaces.go renamed to internal/pkg/log/interface.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package internal
1+
package log
22

33
type Logger interface {
44
Info(msg interface{}, keyvals ...interface{})

internal/pkg/log/log.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package log
2+
3+
type Log struct {
4+
Logger
5+
}
6+
7+
func NewLogger(logger Logger) *Log {
8+
return &Log{Logger: logger}
9+
}

0 commit comments

Comments
 (0)