github.com/rainforestapp/rainforest-cli@v2.12.0+incompatible/resources_test.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"os"
     6  	"regexp"
     7  	"testing"
     8  
     9  	"github.com/rainforestapp/rainforest-cli/rainforest"
    10  )
    11  
    12  func regexMatchOut(pattern string, t *testing.T) {
    13  	matched, err := regexp.Match(pattern, tablesOut.(*bytes.Buffer).Bytes())
    14  	if err != nil {
    15  		t.Error("Error with pattern match:", err)
    16  	}
    17  	if !matched {
    18  		t.Errorf("Printed out %v, want %v", tablesOut, pattern)
    19  	}
    20  }
    21  
    22  func TestPrintResourceTable(t *testing.T) {
    23  	tablesOut = &bytes.Buffer{}
    24  	defer func() {
    25  		tablesOut = os.Stdout
    26  	}()
    27  
    28  	testBody := [][]string{{"1337", "Dyer"}, {"42", "Situation"}}
    29  	printResourceTable([]string{"Column 1", "Column 2"}, testBody)
    30  	regexMatchOut(`\| +COLUMN 1 +\| +COLUMN 2 +\|`, t)
    31  	regexMatchOut(`\| +1337 +\| +Dyer +\|`, t)
    32  }
    33  
    34  type testResourceAPI struct {
    35  	Folders      []rainforest.Folder
    36  	Browsers     []rainforest.Browser
    37  	Sites        []rainforest.Site
    38  	Environments []rainforest.Environment
    39  	Features     []rainforest.Feature
    40  	RunGroups    []rainforest.RunGroup
    41  }
    42  
    43  func (api testResourceAPI) GetFolders() ([]rainforest.Folder, error) {
    44  	return api.Folders, nil
    45  }
    46  
    47  func (api testResourceAPI) GetBrowsers() ([]rainforest.Browser, error) {
    48  	return api.Browsers, nil
    49  }
    50  
    51  func (api testResourceAPI) GetSites() ([]rainforest.Site, error) {
    52  	return api.Sites, nil
    53  }
    54  
    55  func (api testResourceAPI) GetEnvironments() ([]rainforest.Environment, error) {
    56  	return api.Environments, nil
    57  }
    58  
    59  func (api testResourceAPI) GetFeatures() ([]rainforest.Feature, error) {
    60  	return api.Features, nil
    61  }
    62  
    63  func (api testResourceAPI) GetRunGroups() ([]rainforest.RunGroup, error) {
    64  	return api.RunGroups, nil
    65  }
    66  
    67  func TestPrintFolders(t *testing.T) {
    68  	tablesOut = &bytes.Buffer{}
    69  	defer func() {
    70  		tablesOut = os.Stdout
    71  	}()
    72  
    73  	testAPI := testResourceAPI{
    74  		Folders: []rainforest.Folder{
    75  			{ID: 123, Title: "First Folder Title"},
    76  			{ID: 456, Title: "Second Folder Title"},
    77  		},
    78  	}
    79  
    80  	printFolders(testAPI)
    81  	regexMatchOut(`\| +FOLDER ID +\| +FOLDER NAME +\|`, t)
    82  	regexMatchOut(`\| +123 +\| +First Folder Title +\|`, t)
    83  	regexMatchOut(`\| +456 +\| +Second Folder Title +\|`, t)
    84  }
    85  
    86  func TestPrintBrowsers(t *testing.T) {
    87  	tablesOut = &bytes.Buffer{}
    88  	defer func() {
    89  		tablesOut = os.Stdout
    90  	}()
    91  
    92  	testAPI := testResourceAPI{
    93  		Browsers: []rainforest.Browser{
    94  			{Name: "chrome", Description: "Google Chrome"},
    95  			{Name: "firefox", Description: "Mozilla Firefox"},
    96  		},
    97  	}
    98  
    99  	printBrowsers(testAPI)
   100  	regexMatchOut(`\| +BROWSER ID +\| +BROWSER NAME +\|`, t)
   101  	regexMatchOut(`\| +chrome +\| +Google Chrome +\|`, t)
   102  	regexMatchOut(`\| +firefox +\| +Mozilla Firefox +\|`, t)
   103  }
   104  
   105  func TestPrintSites(t *testing.T) {
   106  	tablesOut = &bytes.Buffer{}
   107  	defer func() {
   108  		tablesOut = os.Stdout
   109  	}()
   110  
   111  	testAPI := testResourceAPI{
   112  		Sites: []rainforest.Site{
   113  			{ID: 123, Name: "My favorite site", Category: "site"},
   114  			{ID: 456, Name: "My favorite app URL", Category: "ios"},
   115  			{ID: 789, Name: "Site with unknown platform", Category: "unknown_platform"},
   116  		},
   117  	}
   118  
   119  	printSites(testAPI)
   120  	regexMatchOut(`\| +SITE ID +\| +SITE NAME +\| +CATEGORY +\|`, t)
   121  	regexMatchOut(`\| +123 +\| +My favorite site +\| +Site +\|`, t)
   122  	regexMatchOut(`\| +456 +\| +My favorite app URL +\| +iOS +\|`, t)
   123  	regexMatchOut(`\| +789 +\| +Site with unknown platform +\| +unknown_platform +\|`, t)
   124  }
   125  
   126  func TestPrintEnvironments(t *testing.T) {
   127  	tablesOut = &bytes.Buffer{}
   128  	defer func() {
   129  		tablesOut = os.Stdout
   130  	}()
   131  
   132  	testAPI := testResourceAPI{
   133  		Environments: []rainforest.Environment{
   134  			{ID: 123, Name: "QA"},
   135  			{ID: 456, Name: "Staging 1"},
   136  			{ID: 789, Name: "Staging 2"},
   137  		},
   138  	}
   139  
   140  	printEnvironments(testAPI)
   141  	regexMatchOut(`\| +ENVIRONMENT ID +\| +ENVIRONMENT NAME +\|`, t)
   142  	regexMatchOut(`\| +123 +\| +QA +\|`, t)
   143  	regexMatchOut(`\| +456 +\| +Staging 1 +\|`, t)
   144  	regexMatchOut(`\| +789 +\| +Staging 2 +\|`, t)
   145  }
   146  
   147  func TestPrintFeatures(t *testing.T) {
   148  	tablesOut = &bytes.Buffer{}
   149  	defer func() {
   150  		tablesOut = os.Stdout
   151  	}()
   152  
   153  	testAPI := testResourceAPI{
   154  		Features: []rainforest.Feature{
   155  			{ID: 123, Title: "My favorite feature"},
   156  			{ID: 456, Title: "My least favorite feature"},
   157  			{ID: 789, Title: "An OK feature"},
   158  		},
   159  	}
   160  
   161  	printFeatures(testAPI)
   162  	regexMatchOut(`\| +FEATURE ID +\| +FEATURE TITLE +\|`, t)
   163  	regexMatchOut(`\| +123 +\| +My favorite feature +\|`, t)
   164  	regexMatchOut(`\| +456 +\| +My least favorite feature +\|`, t)
   165  	regexMatchOut(`\| +789 +\| +An OK feature +\|`, t)
   166  }
   167  
   168  func TestPrintRunGroups(t *testing.T) {
   169  	tablesOut = &bytes.Buffer{}
   170  	defer func() {
   171  		tablesOut = os.Stdout
   172  	}()
   173  
   174  	testAPI := testResourceAPI{
   175  		RunGroups: []rainforest.RunGroup{
   176  			{ID: 123, Title: "My favorite run group"},
   177  			{ID: 456, Title: "My least favorite run group"},
   178  			{ID: 789, Title: "An OK run group"},
   179  		},
   180  	}
   181  
   182  	printRunGroups(testAPI)
   183  	regexMatchOut(`\| +RUN GROUP ID +\| +RUN GROUP TITLE +\|`, t)
   184  	regexMatchOut(`\| +123 +\| +My favorite run group +\|`, t)
   185  	regexMatchOut(`\| +456 +\| +My least favorite run group +\|`, t)
   186  	regexMatchOut(`\| +789 +\| +An OK run group +\|`, t)
   187  }