github.com/trevoraustin/hub@v2.2.0-preview1.0.20141105230840-96d8bfc654cc+incompatible/github/editor_test.go (about)

     1  package github
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"strings"
    10  	"testing"
    11  
    12  	"github.com/bmizerany/assert"
    13  )
    14  
    15  func TestEditor_openAndEdit_deleteFileWhenOpeningEditorFails(t *testing.T) {
    16  	tempFile, _ := ioutil.TempFile("", "editor-test")
    17  	ioutil.WriteFile(tempFile.Name(), []byte("hello"), 0644)
    18  	editor := Editor{
    19  		Program: "memory",
    20  		File:    tempFile.Name(),
    21  		Topic:   "test",
    22  		openEditor: func(program string, file string) error {
    23  			assert.Equal(t, "memory", program)
    24  			assert.Equal(t, tempFile.Name(), file)
    25  			return fmt.Errorf("error")
    26  		},
    27  	}
    28  
    29  	_, err := editor.openAndEdit()
    30  	assert.NotEqual(t, nil, err)
    31  	assert.Equal(t, "error using text editor for test message", fmt.Sprintf("%s", err))
    32  
    33  	_, err = os.Stat(tempFile.Name())
    34  	assert.T(t, os.IsNotExist(err))
    35  }
    36  
    37  func TestEditor_openAndEdit_readFileIfExist(t *testing.T) {
    38  	tempFile, _ := ioutil.TempFile("", "editor-test")
    39  	ioutil.WriteFile(tempFile.Name(), []byte("hello"), 0644)
    40  	editor := Editor{
    41  		Program: "memory",
    42  		File:    tempFile.Name(),
    43  		openEditor: func(program string, file string) error {
    44  			assert.Equal(t, "memory", program)
    45  			assert.Equal(t, tempFile.Name(), file)
    46  
    47  			return nil
    48  		},
    49  	}
    50  
    51  	content, err := editor.openAndEdit()
    52  	assert.Equal(t, nil, err)
    53  	assert.Equal(t, "hello", string(content))
    54  }
    55  
    56  func TestEditor_openAndEdit_writeFileIfNotExist(t *testing.T) {
    57  	tempDir, _ := ioutil.TempDir("", "editor-test")
    58  	tempFile := filepath.Join(tempDir, "PULLREQ")
    59  	editor := Editor{
    60  		Program: "memory",
    61  		File:    tempFile,
    62  		openEditor: func(program string, file string) error {
    63  			assert.Equal(t, "memory", program)
    64  			assert.Equal(t, tempFile, file)
    65  
    66  			return ioutil.WriteFile(file, []byte("hello"), 0644)
    67  		},
    68  	}
    69  
    70  	content, err := editor.openAndEdit()
    71  	assert.Equal(t, nil, err)
    72  	assert.Equal(t, "hello", string(content))
    73  }
    74  
    75  func TestEditor_EditTitleAndBody(t *testing.T) {
    76  	tempDir, _ := ioutil.TempDir("", "editor-test")
    77  	tempFile := filepath.Join(tempDir, "PULLREQ")
    78  	editor := Editor{
    79  		Program: "memory",
    80  		File:    tempFile,
    81  		CS:      "#",
    82  		openEditor: func(program string, file string) error {
    83  			assert.Equal(t, "memory", program)
    84  			assert.Equal(t, tempFile, file)
    85  
    86  			message := `A title
    87  A title continues
    88  
    89  A body
    90  A body continues
    91  # comment
    92  `
    93  			return ioutil.WriteFile(file, []byte(message), 0644)
    94  		},
    95  	}
    96  
    97  	title, body, err := editor.EditTitleAndBody()
    98  	assert.Equal(t, nil, err)
    99  	assert.Equal(t, "A title A title continues", title)
   100  	assert.Equal(t, "A body\nA body continues", body)
   101  }
   102  
   103  func TestReadTitleAndBody(t *testing.T) {
   104  	message := `A title
   105  A title continues
   106  
   107  A body
   108  A body continues
   109  # comment
   110  `
   111  	r := strings.NewReader(message)
   112  	reader := bufio.NewReader(r)
   113  	title, body, err := readTitleAndBody(reader, "#")
   114  	assert.Equal(t, nil, err)
   115  	assert.Equal(t, "A title A title continues", title)
   116  	assert.Equal(t, "A body\nA body continues", body)
   117  
   118  	message = `# Dat title
   119  
   120  / This line is commented out.
   121  
   122  Dem body.
   123  `
   124  	r = strings.NewReader(message)
   125  	reader = bufio.NewReader(r)
   126  	title, body, err = readTitleAndBody(reader, "/")
   127  	assert.Equal(t, nil, err)
   128  	assert.Equal(t, "# Dat title", title)
   129  	assert.Equal(t, "Dem body.", body)
   130  }
   131  
   132  func TestGetMessageFile(t *testing.T) {
   133  	gitPullReqMsgFile, _ := getMessageFile("PULLREQ")
   134  	assert.T(t, strings.Contains(gitPullReqMsgFile, "PULLREQ_EDITMSG"))
   135  }