aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java10
-rw-r--r--server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/Navigation.java23
-rw-r--r--server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/PropertySetInput.java4
-rw-r--r--server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/SettingsPage.java14
-rw-r--r--server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java3
-rw-r--r--server/sonar-web/src/main/js/apps/explore/ExploreProjects.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx27
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/AllProjectsContainer.tsx1
-rw-r--r--server/sonar-web/src/main/js/apps/projects/components/__tests__/AllProjects-test.tsx20
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx7
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/LineNumber.tsx1
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/LineSCM.tsx1
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineNumber-test.tsx.snap6
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineSCM-test.tsx.snap18
-rw-r--r--server/sonar-web/src/main/js/components/common/MultiSelect.tsx31
-rw-r--r--server/sonar-web/src/main/js/helpers/storage.ts43
-rw-r--r--tests/build.gradle6
-rw-r--r--tests/projects/qualitygate/small-changesets/v1-1000-lines/src/sample/Sample.xoo.scm2000
-rw-r--r--tests/projects/qualitygate/small-changesets/v2-1019-lines/src/sample/Sample.xoo.scm2038
-rw-r--r--tests/projects/qualitygate/small-changesets/v2-1020-lines/src/sample/Sample.xoo.scm2040
-rw-r--r--tests/src/test/java/org/sonarqube/tests/Category6Suite.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplatePageTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/component/BranchTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/component/CodePageTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/component/ComponentsWsTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/component/ModuleTest.java18
-rw-r--r--tests/src/test/java/org/sonarqube/tests/issue/IssueNotificationsTest.java331
-rw-r--r--tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java3
-rw-r--r--tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueAssignTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssuesPageTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/measure/ProjectActivityPageTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/measure/ProjectDashboardTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/organization/BillingTest.java3
-rw-r--r--tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/OrganizationProjectSuite.java (renamed from tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java)33
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectBadgesTest.java7
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionPageTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectDeletionTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectFilterTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdatePageTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdateTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectLeakPageTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectLinksTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectListTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectProvisioningTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectSearchTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectSettingsTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java14
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectVisibilityPageTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectsExplorePageTest.java168
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/ProjectsPageTest.java13
-rw-r--r--tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectBadgesTest.java2
-rw-r--r--tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateForSmallChangesetsTest.java71
-rw-r--r--tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java1
-rw-r--r--tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateTest.java7
-rw-r--r--tests/src/test/java/org/sonarqube/tests/serverSystem/HttpHeadersTest.java11
-rw-r--r--tests/src/test/java/org/sonarqube/tests/settings/ValidatorsTest.java6
-rw-r--r--tests/src/test/java/org/sonarqube/tests/user/NotificationsWsTest.java4
-rw-r--r--tests/src/test/java/org/sonarqube/tests/user/SonarCloudUserSuite.java3
-rw-r--r--tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java2
62 files changed, 3592 insertions, 3464 deletions
diff --git a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java
index 2609faaa7c0..7378ffd1860 100644
--- a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java
+++ b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/QProfileTester.java
@@ -22,6 +22,7 @@ package org.sonarqube.qa.util;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
+import javax.annotation.Nullable;
import org.assertj.core.api.Assertions;
import org.sonarqube.ws.Common;
import org.sonarqube.ws.Organizations.Organization;
@@ -55,10 +56,15 @@ public class QProfileTester {
}
@SafeVarargs
- public final QualityProfile createXooProfile(Organization organization, Consumer<CreateRequest>... populators) {
+ public final QualityProfile createXooProfile(Consumer<CreateRequest>... populators) {
+ return createXooProfile(null, populators);
+ }
+
+ @SafeVarargs
+ public final QualityProfile createXooProfile(@Nullable Organization organization, Consumer<CreateRequest>... populators) {
int id = ID_GENERATOR.getAndIncrement();
CreateRequest request = new CreateRequest()
- .setOrganization(organization.getKey())
+ .setOrganization(organization == null ? null : organization.getKey())
.setLanguage("xoo")
.setName("Profile" + id);
stream(populators).forEach(p -> p.accept(request));
diff --git a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/Navigation.java b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/Navigation.java
index 073df461b8b..a0266da622a 100644
--- a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/Navigation.java
+++ b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/Navigation.java
@@ -55,7 +55,7 @@ public class Navigation {
driver.manage().deleteAllCookies();
clearStorage(d -> d.getLocalStorage().clear());
clearStorage(d -> d.getSessionStorage().clear());
- clearStorage(d -> Selenide.clearBrowserLocalStorage());
+ clearBrowserLocalStorage();
return Selenide.open(path, Navigation.class);
}
@@ -69,6 +69,19 @@ public class Navigation {
}
}
+ /**
+ * Do not call {@link #clearStorage(Consumer)} for {@link Selenide#clearBrowserLocalStorage} as it's failing on Firefox 46
+ */
+ private static void clearBrowserLocalStorage() {
+ try {
+ Selenide.clearBrowserLocalStorage();
+ } catch (Exception e) {
+ // ignore, it may occur when the first test opens browser. No pages are loaded
+ // and local/session storages are not available yet.
+ // Example with Chrome: "Failed to read the 'localStorage' property from 'Window': Storage is disabled inside 'data:' URLs."
+ }
+ }
+
public Navigation openHome() {
return open("/", Navigation.class);
}
@@ -85,10 +98,18 @@ public class Navigation {
return open("/projects?" + query, ProjectsPage.class);
}
+ public ProjectsPage openExploreProjects() {
+ return open("/explore/projects", ProjectsPage.class);
+ }
+
public IssuesPage openIssues() {
return open("/issues", IssuesPage.class);
}
+ public IssuesPage openExploreIssues() {
+ return open("/explore/issues", IssuesPage.class);
+ }
+
public IssuesPage openIssues(String organization) {
return open("/organizations/" + organization + "/issues", IssuesPage.class);
}
diff --git a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/PropertySetInput.java b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/PropertySetInput.java
index 759f7189a71..46f1ac6201a 100644
--- a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/PropertySetInput.java
+++ b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/PropertySetInput.java
@@ -40,8 +40,8 @@ public class PropertySetInput {
}
public PropertySetInput save() {
- elt.find(".js-save-changes").click();
- elt.find(".js-save-changes").shouldNot(Condition.exist);
+ elt.find(".button-success").click();
+ elt.find(".button-success").shouldNot(Condition.exist);
return this;
}
}
diff --git a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/SettingsPage.java b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/SettingsPage.java
index 9bb53d9b50f..f55d3edfa9d 100644
--- a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/SettingsPage.java
+++ b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/settings/SettingsPage.java
@@ -116,12 +116,12 @@ public class SettingsPage {
}
public SettingsPage clickOnCancel(String settingKey) {
- Selenide.$("[data-key=\"" + settingKey + "\"]").find(byText("Cancel")).click();
+ click(Selenide.$("[data-key=\"" + settingKey + "\"]").find(byText("Cancel")));
return this;
}
public SettingsPage removeFirstValue(String settingKey) {
- Selenide.$("[data-key=\"" + settingKey + "\"]").find(".button.js-remove-value.button-icon").click();
+ click(Selenide.$("[data-key=\"" + settingKey + "\"]").find(".js-remove-value"));
return this;
}
@@ -133,8 +133,8 @@ public class SettingsPage {
public SettingsPage setStringValue(String settingKey, String value) {
SelenideElement setting = Selenide.$(".settings-definition[data-key=\"" + settingKey + "\"]");
setting.find("input").val(value);
- setting.find(".js-save-changes").click();
- setting.find(".js-save-changes").shouldNot(Condition.exist);
+ setting.find(".button-success").click();
+ setting.find(".button-success").shouldNot(Condition.exist);
return this;
}
@@ -142,4 +142,10 @@ public class SettingsPage {
SelenideElement setting = Selenide.$(".settings-definition[data-key=\"" + settingKey + "\"]");
return new PropertySetInput(setting);
}
+
+ private void click(SelenideElement selenideElement){
+ // FIXME Temporary fix to correctly scroll in Firefox 46
+ Selenide.executeJavaScript("arguments[0].click()", selenideElement);
+ }
+
}
diff --git a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java
index dcdb8b6e29f..4cc5adcd424 100644
--- a/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java
+++ b/server/sonar-server/src/main/java/org/sonar/server/qualitygate/ws/UpdateConditionAction.java
@@ -89,7 +89,8 @@ public class UpdateConditionAction implements QualityGatesWsAction {
QGateWithOrgDto qualityGateDto = dbClient.qualityGateDao().selectByOrganizationAndId(dbSession, organization, condition.getQualityGateId());
checkState(qualityGateDto != null, "Condition '%s' is linked to an unknown quality gate '%s'", id, condition.getQualityGateId());
wsSupport.checkCanEdit(qualityGateDto);
- QualityGateConditionDto updatedCondition = qualityGateConditionsUpdater.updateCondition(dbSession, condition, metric, operator, emptyToNull(warning), emptyToNull(error), period);
+ QualityGateConditionDto updatedCondition = qualityGateConditionsUpdater.updateCondition(dbSession, condition, metric, operator,
+ emptyToNull(warning), emptyToNull(error), period);
UpdateConditionResponse.Builder updateConditionResponse = UpdateConditionResponse.newBuilder()
.setId(updatedCondition.getId())
.setMetric(updatedCondition.getMetricKey())
diff --git a/server/sonar-web/src/main/js/apps/explore/ExploreProjects.tsx b/server/sonar-web/src/main/js/apps/explore/ExploreProjects.tsx
index 67f09dc545e..ff1789ee68c 100644
--- a/server/sonar-web/src/main/js/apps/explore/ExploreProjects.tsx
+++ b/server/sonar-web/src/main/js/apps/explore/ExploreProjects.tsx
@@ -26,5 +26,5 @@ interface Props {
}
export default function ExploreProjects(props: Props) {
- return <AllProjectsContainer isFavorite={false} {...props} />;
+ return <AllProjectsContainer isFavorite={false} storageOptionsSuffix="explore" {...props} />;
}
diff --git a/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx b/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx
index b0f995c2846..dc9836331d8 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/AllProjects.tsx
@@ -44,6 +44,7 @@ export interface Props {
onSonarCloud: boolean;
organization?: { key: string };
organizationsEnabled: boolean;
+ storageOptionsSuffix?: string;
}
interface State {
@@ -151,25 +152,27 @@ export default class AllProjects extends React.PureComponent<Props, State> {
}
};
- getSavedOptions = () => {
+ getStorageOptions = () => {
+ const { storageOptionsSuffix } = this.props;
const options: {
sort?: string;
view?: string;
visualization?: string;
} = {};
- if (storage.getSort()) {
- options.sort = storage.getSort() || undefined;
+ if (storage.getSort(storageOptionsSuffix)) {
+ options.sort = storage.getSort(storageOptionsSuffix) || undefined;
}
- if (storage.getView()) {
- options.view = storage.getView() || undefined;
+ if (storage.getView(storageOptionsSuffix)) {
+ options.view = storage.getView(storageOptionsSuffix) || undefined;
}
- if (storage.getVisualization()) {
- options.visualization = storage.getVisualization() || undefined;
+ if (storage.getVisualization(storageOptionsSuffix)) {
+ options.visualization = storage.getVisualization(storageOptionsSuffix) || undefined;
}
return options;
};
handlePerspectiveChange = ({ view, visualization }: { view: string; visualization?: string }) => {
+ const { storageOptionsSuffix } = this.props;
const query: {
view: string | undefined;
visualization: string | undefined;
@@ -191,20 +194,20 @@ export default class AllProjects extends React.PureComponent<Props, State> {
this.updateLocationQuery(query);
}
- storage.saveSort(query.sort);
- storage.saveView(query.view);
- storage.saveVisualization(visualization);
+ storage.saveSort(query.sort, storageOptionsSuffix);
+ storage.saveView(query.view, storageOptionsSuffix);
+ storage.saveVisualization(visualization, storageOptionsSuffix);
};
handleSortChange = (sort: string, desc: boolean) => {
const asString = (desc ? '-' : '') + sort;
this.updateLocationQuery({ sort: asString });
- storage.saveSort(asString);
+ storage.saveSort(asString, this.props.storageOptionsSuffix);
};
handleQueryChange(initialMount: boolean) {
const query = parseUrlQuery(this.props.location.query);
- const savedOptions = this.getSavedOptions();
+ const savedOptions = this.getStorageOptions();
const savedOptionsSet = savedOptions.sort || savedOptions.view || savedOptions.visualization;
// if there is no filter, but there are saved preferences in the localStorage
diff --git a/server/sonar-web/src/main/js/apps/projects/components/AllProjectsContainer.tsx b/server/sonar-web/src/main/js/apps/projects/components/AllProjectsContainer.tsx
index 6d236c388a2..cd24cb1cb1e 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/AllProjectsContainer.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/AllProjectsContainer.tsx
@@ -37,6 +37,7 @@ interface OwnProps {
isFavorite: boolean;
location: { pathname: string; query: RawQuery };
organization?: { key: string };
+ storageOptionsSuffix?: string;
}
const stateToProps = (state: any) => {
diff --git a/server/sonar-web/src/main/js/apps/projects/components/__tests__/AllProjects-test.tsx b/server/sonar-web/src/main/js/apps/projects/components/__tests__/AllProjects-test.tsx
index 14ea18c6c7c..cc642e972f4 100644
--- a/server/sonar-web/src/main/js/apps/projects/components/__tests__/AllProjects-test.tsx
+++ b/server/sonar-web/src/main/js/apps/projects/components/__tests__/AllProjects-test.tsx
@@ -117,7 +117,7 @@ it('changes sort', () => {
const wrapper = shallowRender({}, push);
wrapper.find('PageHeader').prop<Function>('onSortChange')('size', false);
expect(push).lastCalledWith({ pathname: '/projects', query: { sort: 'size' } });
- expect(saveSort).lastCalledWith('size');
+ expect(saveSort).lastCalledWith('size', undefined);
});
it('changes perspective to leak', () => {
@@ -128,9 +128,9 @@ it('changes perspective to leak', () => {
pathname: '/projects',
query: { view: 'leak', visualization: undefined }
});
- expect(saveSort).lastCalledWith(undefined);
- expect(saveView).lastCalledWith('leak');
- expect(saveVisualization).lastCalledWith(undefined);
+ expect(saveSort).lastCalledWith(undefined, undefined);
+ expect(saveView).lastCalledWith('leak', undefined);
+ expect(saveVisualization).lastCalledWith(undefined, undefined);
});
it('updates sorting when changing perspective from leak', () => {
@@ -144,9 +144,9 @@ it('updates sorting when changing perspective from leak', () => {
pathname: '/projects',
query: { sort: 'coverage', view: undefined, visualization: undefined }
});
- expect(saveSort).lastCalledWith('coverage');
- expect(saveView).lastCalledWith(undefined);
- expect(saveVisualization).lastCalledWith(undefined);
+ expect(saveSort).lastCalledWith('coverage', undefined);
+ expect(saveView).lastCalledWith(undefined, undefined);
+ expect(saveVisualization).lastCalledWith(undefined, undefined);
});
it('changes perspective to risk visualization', () => {
@@ -160,9 +160,9 @@ it('changes perspective to risk visualization', () => {
pathname: '/projects',
query: { view: 'visualizations', visualization: 'risk' }
});
- expect(saveSort).lastCalledWith(undefined);
- expect(saveView).lastCalledWith('visualizations');
- expect(saveVisualization).lastCalledWith('risk');
+ expect(saveSort).lastCalledWith(undefined, undefined);
+ expect(saveView).lastCalledWith('visualizations', undefined);
+ expect(saveVisualization).lastCalledWith('risk', undefined);
});
function mountRender(props: any = {}, push: Function = jest.fn(), replace: Function = jest.fn()) {
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
index 1c615cc6bd4..c0e9326f5e8 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerBase.tsx
@@ -100,7 +100,6 @@ interface State {
duplications?: Duplication[];
duplicationsByLine: { [line: number]: number[] };
hasSourcesAfter: boolean;
- highlightedLine?: number;
highlightedSymbols: string[];
issueLocationsByLine: { [line: number]: LinearIssueLocation[] };
issuePopup?: { issue: string; name: string };
@@ -134,11 +133,11 @@ export default class SourceViewerBase extends React.PureComponent<Props, State>
constructor(props: Props) {
super(props);
+
this.state = {
displayDuplications: false,
duplicationsByLine: {},
hasSourcesAfter: false,
- highlightedLine: props.highlightedLine,
highlightedSymbols: [],
issuesByLine: {},
issueLocationsByLine: {},
@@ -242,6 +241,7 @@ export default class SourceViewerBase extends React.PureComponent<Props, State>
issues => {
if (this.mounted) {
const finalSources = sources.slice(0, LINES);
+
this.setState(
{
component,
@@ -250,7 +250,6 @@ export default class SourceViewerBase extends React.PureComponent<Props, State>
duplications: undefined,
duplicationsByLine: {},
hasSourcesAfter: sources.length > LINES,
- highlightedLine: undefined,
highlightedSymbols: [],
issueLocationsByLine: locationsByLine(issues),
issues,
@@ -669,7 +668,7 @@ export default class SourceViewerBase extends React.PureComponent<Props, State>
filterLine={this.handleFilterLine}
hasSourcesAfter={this.state.hasSourcesAfter}
hasSourcesBefore={hasSourcesBefore}
- highlightedLine={this.state.highlightedLine}
+ highlightedLine={this.props.highlightedLine}
highlightedLocationMessage={this.props.highlightedLocationMessage}
highlightedLocations={this.props.highlightedLocations}
highlightedSymbols={this.state.highlightedSymbols}
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/LineNumber.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/LineNumber.tsx
index 6d1f4940141..9297036d88d 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/LineNumber.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/LineNumber.tsx
@@ -56,6 +56,7 @@ export default class LineNumber extends React.PureComponent<Props> {
tabIndex={0}>
<BubblePopupHelper
isOpen={popupOpen}
+ offset={{ vertical: -18, horizontal: 0 }}
popup={
<LineOptionsPopup branchLike={branchLike} componentKey={componentKey} line={line} />
}
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/LineSCM.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/LineSCM.tsx
index c1de61e6ee2..e692a3c46f1 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/LineSCM.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/LineSCM.tsx
@@ -58,6 +58,7 @@ export default class LineSCM extends React.PureComponent<Props> {
{cell}
<BubblePopupHelper
isOpen={popupOpen}
+ offset={{ vertical: -18, horizontal: 0 }}
popup={<SCMPopup line={line} />}
position="bottomright"
togglePopup={this.handleTogglePopup}
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineNumber-test.tsx.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineNumber-test.tsx.snap
index 2633afb6d2c..3841048e4ae 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineNumber-test.tsx.snap
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineNumber-test.tsx.snap
@@ -16,6 +16,12 @@ exports[`render line 3 1`] = `
>
<BubblePopupHelper
isOpen={false}
+ offset={
+ Object {
+ "horizontal": 0,
+ "vertical": -18,
+ }
+ }
popup={
<LineOptionsPopup
branchLike={undefined}
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineSCM-test.tsx.snap b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineSCM-test.tsx.snap
index dcbaf7e2c9c..c320b6a9b36 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineSCM-test.tsx.snap
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/__tests__/__snapshots__/LineSCM-test.tsx.snap
@@ -10,6 +10,12 @@ exports[`does not render scm details 1`] = `
>
<BubblePopupHelper
isOpen={false}
+ offset={
+ Object {
+ "horizontal": 0,
+ "vertical": -18,
+ }
+ }
popup={
<SCMPopup
line={
@@ -41,6 +47,12 @@ exports[`render scm details 1`] = `
/>
<BubblePopupHelper
isOpen={false}
+ offset={
+ Object {
+ "horizontal": 0,
+ "vertical": -18,
+ }
+ }
popup={
<SCMPopup
line={
@@ -72,6 +84,12 @@ exports[`render scm details for the first line 1`] = `
/>
<BubblePopupHelper
isOpen={false}
+ offset={
+ Object {
+ "horizontal": 0,
+ "vertical": -18,
+ }
+ }
popup={
<SCMPopup
line={
diff --git a/server/sonar-web/src/main/js/components/common/MultiSelect.tsx b/server/sonar-web/src/main/js/components/common/MultiSelect.tsx
index 892cab66813..3da8a520ebe 100644
--- a/server/sonar-web/src/main/js/components/common/MultiSelect.tsx
+++ b/server/sonar-web/src/main/js/components/common/MultiSelect.tsx
@@ -257,6 +257,7 @@ export default class MultiSelect extends React.PureComponent<Props, State> {
const { renderLabel } = this.props as PropsWithDefault;
const { query, activeIdx, selectedElements, unselectedElements } = this.state;
const activeElement = this.getAllElements(this.props, this.state)[activeIdx];
+ const showNewElement = allowNewElements && this.isNewElement(query, this.props);
const infiniteList = this.props.listSize === 0;
const listClasses = classNames('menu', {
'menu-vertically-limited': infiniteList,
@@ -278,10 +279,6 @@ export default class MultiSelect extends React.PureComponent<Props, State> {
/>
</div>
<ul className={listClasses}>
- {selectedElements.length < 1 &&
- unselectedElements.length < 1 && (
- <li className="spacer-left">{translateWithParameters('no_results_for_x', query)}</li>
- )}
{selectedElements.length > 0 &&
selectedElements.map(element => (
<MultiSelectOption
@@ -306,17 +303,21 @@ export default class MultiSelect extends React.PureComponent<Props, State> {
renderLabel={renderLabel}
/>
))}
- {allowNewElements &&
- this.isNewElement(query, this.props) && (
- <MultiSelectOption
- active={activeElement === query}
- custom={true}
- element={query}
- key={query}
- onHover={this.handleElementHover}
- onSelectChange={this.handleSelectChange}
- renderLabel={renderLabel}
- />
+ {showNewElement && (
+ <MultiSelectOption
+ active={activeElement === query}
+ custom={true}
+ element={query}
+ key={query}
+ onHover={this.handleElementHover}
+ onSelectChange={this.handleSelectChange}
+ renderLabel={renderLabel}
+ />
+ )}
+ {!showNewElement &&
+ selectedElements.length < 1 &&
+ unselectedElements.length < 1 && (
+ <li className="spacer-left">{translateWithParameters('no_results_for_x', query)}</li>
)}
</ul>
{footerNode}
diff --git a/server/sonar-web/src/main/js/helpers/storage.ts b/server/sonar-web/src/main/js/helpers/storage.ts
index fc54899c8b4..b533d353735 100644
--- a/server/sonar-web/src/main/js/helpers/storage.ts
+++ b/server/sonar-web/src/main/js/helpers/storage.ts
@@ -28,12 +28,13 @@ const PROJECTS_SORT = 'sonarqube.projects.sort';
const PROJECT_ACTIVITY_GRAPH = 'sonarqube.project_activity.graph';
const PROJECT_ACTIVITY_GRAPH_CUSTOM = 'sonarqube.project_activity.graph.custom';
-function save(key: string, value?: string): void {
+function save(key: string, value?: string, suffix?: string): void {
try {
+ const finalKey = suffix ? `${key}.${suffix}` : key;
if (value) {
- window.localStorage.setItem(key, value);
+ window.localStorage.setItem(finalKey, value);
} else {
- window.localStorage.removeItem(key);
+ window.localStorage.removeItem(finalKey);
}
} catch (e) {
// usually that means the storage is full
@@ -41,12 +42,16 @@ function save(key: string, value?: string): void {
}
}
+function get(key: string, suffix?: string): string | null {
+ return window.localStorage.getItem(suffix ? `${key}.${suffix}` : key);
+}
+
export function saveFavorite(): void {
save(PROJECTS_DEFAULT_FILTER, PROJECTS_FAVORITE);
}
export function isFavoriteSet(): boolean {
- const setting = window.localStorage.getItem(PROJECTS_DEFAULT_FILTER);
+ const setting = get(PROJECTS_DEFAULT_FILTER);
return setting === PROJECTS_FAVORITE;
}
@@ -55,32 +60,32 @@ export function saveAll(): void {
}
export function isAllSet(): boolean {
- const setting = window.localStorage.getItem(PROJECTS_DEFAULT_FILTER);
+ const setting = get(PROJECTS_DEFAULT_FILTER);
return setting === PROJECTS_ALL;
}
-export function saveView(view?: string): void {
- save(PROJECTS_VIEW, view);
+export function saveView(view?: string, suffix?: string): void {
+ save(PROJECTS_VIEW, view, suffix);
}
-export function getView(): string | null {
- return window.localStorage.getItem(PROJECTS_VIEW);
+export function getView(suffix?: string): string | null {
+ return get(PROJECTS_VIEW, suffix);
}
-export function saveVisualization(visualization?: string): void {
- save(PROJECTS_VISUALIZATION, visualization);
+export function saveVisualization(visualization?: string, suffix?: string): void {
+ save(PROJECTS_VISUALIZATION, visualization, suffix);
}
-export function getVisualization(): string | null {
- return window.localStorage.getItem(PROJECTS_VISUALIZATION);
+export function getVisualization(suffix?: string): string | null {
+ return get(PROJECTS_VISUALIZATION, suffix);
}
-export function saveSort(sort?: string): void {
- save(PROJECTS_SORT, sort);
+export function saveSort(sort?: string, suffix?: string): void {
+ save(PROJECTS_SORT, sort, suffix);
}
-export function getSort(): string | null {
- return window.localStorage.getItem(PROJECTS_SORT);
+export function getSort(suffix?: string): string | null {
+ return get(PROJECTS_SORT, suffix);
}
export function saveCustomGraph(metrics?: string[]): void {
@@ -88,7 +93,7 @@ export function saveCustomGraph(metrics?: string[]): void {
}
export function getCustomGraph(): string[] {
- const customGraphs = window.localStorage.getItem(PROJECT_ACTIVITY_GRAPH_CUSTOM);
+ const customGraphs = get(PROJECT_ACTIVITY_GRAPH_CUSTOM);
return customGraphs ? customGraphs.split(',') : [];
}
@@ -97,5 +102,5 @@ export function saveGraph(graph?: string): void {
}
export function getGraph(): string {
- return window.localStorage.getItem(PROJECT_ACTIVITY_GRAPH) || 'issues';
+ return get(PROJECT_ACTIVITY_GRAPH) || 'issues';
}
diff --git a/tests/build.gradle b/tests/build.gradle
index 666130b7e6f..f1eb642dd21 100644
--- a/tests/build.gradle
+++ b/tests/build.gradle
@@ -129,13 +129,13 @@ task integrationTest(type: Test) {
includeTestsMatching 'org.sonarqube.tests.organization.*Suite'
break
case 'Plugins':
- includeTestsMatching 'org.sonarqube.tests.plugins.PluginsSuite'
+ includeTestsMatching 'org.sonarqube.tests.plugins.*Suite'
break
case 'Upgrade':
- includeTestsMatching 'org.sonarqube.tests.upgrade.UpgradeSuite'
+ includeTestsMatching 'org.sonarqube.tests.upgrade.*Suite'
break
case 'ServerPerformance':
- includeTestsMatching 'org.sonarqube.tests.performance.server.ServerPerformanceSuite'
+ includeTestsMatching 'org.sonarqube.tests.performance.server.*Suite'
break
}
testLogging {
diff --git a/tests/projects/qualitygate/small-changesets/v1-1000-lines/src/sample/Sample.xoo.scm b/tests/projects/qualitygate/small-changesets/v1-1000-lines/src/sample/Sample.xoo.scm
index d33880c7e51..8939249bc5c 100644
--- a/tests/projects/qualitygate/small-changesets/v1-1000-lines/src/sample/Sample.xoo.scm
+++ b/tests/projects/qualitygate/small-changesets/v1-1000-lines/src/sample/Sample.xoo.scm
@@ -1,1000 +1,1000 @@
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01 \ No newline at end of file
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
diff --git a/tests/projects/qualitygate/small-changesets/v2-1019-lines/src/sample/Sample.xoo.scm b/tests/projects/qualitygate/small-changesets/v2-1019-lines/src/sample/Sample.xoo.scm
index def6df882e8..aa26ea19f24 100644
--- a/tests/projects/qualitygate/small-changesets/v2-1019-lines/src/sample/Sample.xoo.scm
+++ b/tests/projects/qualitygate/small-changesets/v2-1019-lines/src/sample/Sample.xoo.scm
@@ -1,1019 +1,1019 @@
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01 \ No newline at end of file
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
diff --git a/tests/projects/qualitygate/small-changesets/v2-1020-lines/src/sample/Sample.xoo.scm b/tests/projects/qualitygate/small-changesets/v2-1020-lines/src/sample/Sample.xoo.scm
index 98fd9a53dda..eb74ab95461 100644
--- a/tests/projects/qualitygate/small-changesets/v2-1020-lines/src/sample/Sample.xoo.scm
+++ b/tests/projects/qualitygate/small-changesets/v2-1020-lines/src/sample/Sample.xoo.scm
@@ -1,1020 +1,1020 @@
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-1,user1,2013-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-2,user2,2014-04-01
-3,user3,2014-04-03 \ No newline at end of file
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+1,user1,2017-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+2,user2,2018-04-01
+3,user3,2018-04-03
diff --git a/tests/src/test/java/org/sonarqube/tests/Category6Suite.java b/tests/src/test/java/org/sonarqube/tests/Category6Suite.java
index c8bbc8001f3..7079fc7b7e4 100644
--- a/tests/src/test/java/org/sonarqube/tests/Category6Suite.java
+++ b/tests/src/test/java/org/sonarqube/tests/Category6Suite.java
@@ -27,7 +27,6 @@ import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.sonarqube.tests.authorization.PermissionTemplateTest;
import org.sonarqube.tests.ce.ReportFailureNotificationTest;
-import org.sonarqube.tests.issue.IssueNotificationsTest;
import org.sonarqube.tests.issue.IssueTagsTest;
import org.sonarqube.tests.issue.OrganizationIssuesPageTest;
import org.sonarqube.tests.qualityProfile.BuiltInQualityProfilesTest;
@@ -63,8 +62,7 @@ import static util.ItUtils.xooPlugin;
RulesWsTest.class,
RulesMarkdownTest.class,
PermissionTemplateTest.class,
- ReportFailureNotificationTest.class,
- IssueNotificationsTest.class
+ ReportFailureNotificationTest.class
})
public class Category6Suite {
diff --git a/tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplatePageTest.java b/tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplatePageTest.java
index a6185016560..05650795cac 100644
--- a/tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplatePageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/authorization/PermissionTemplatePageTest.java
@@ -45,8 +45,8 @@ public class PermissionTemplatePageTest {
@Test
public void bulk_apply_permission_template() {
String project = tester.projects().provision().getKey();
- String userLogin = tester.users().generateMemberOfDefaultOrganization().getLogin();
- String adminLogin = tester.users().generateAdministratorOnDefaultOrganization().getLogin();
+ String userLogin = tester.users().generate().getLogin();
+ String adminLogin = tester.users().generateAdministrator().getLogin();
tester.wsClient().permissions().createTemplate(new CreateTemplateRequest().setName("foo-template"));
tester.wsClient().permissions().addUserToTemplate(
diff --git a/tests/src/test/java/org/sonarqube/tests/component/BranchTest.java b/tests/src/test/java/org/sonarqube/tests/component/BranchTest.java
index e1e5dab62c3..0086fee15b0 100644
--- a/tests/src/test/java/org/sonarqube/tests/component/BranchTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/component/BranchTest.java
@@ -42,7 +42,7 @@ public class BranchTest {
public static Orchestrator orchestrator = ComponentSuite.ORCHESTRATOR;
@Rule
- public Tester tester = new Tester(orchestrator);
+ public Tester tester = new Tester(orchestrator).disableOrganizations();
@Test
public void list_branches_contains_main_branch() {
diff --git a/tests/src/test/java/org/sonarqube/tests/component/CodePageTest.java b/tests/src/test/java/org/sonarqube/tests/component/CodePageTest.java
index a2fb3478de1..ee0795801cf 100644
--- a/tests/src/test/java/org/sonarqube/tests/component/CodePageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/component/CodePageTest.java
@@ -35,7 +35,7 @@ public class CodePageTest {
public static Orchestrator orchestrator = ComponentSuite.ORCHESTRATOR;
@Rule
- public Tester tester = new Tester(orchestrator);
+ public Tester tester = new Tester(orchestrator).disableOrganizations();
@Test
public void code_page() {
diff --git a/tests/src/test/java/org/sonarqube/tests/component/ComponentsWsTest.java b/tests/src/test/java/org/sonarqube/tests/component/ComponentsWsTest.java
index 470b5b6d967..2d55b8862f7 100644
--- a/tests/src/test/java/org/sonarqube/tests/component/ComponentsWsTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/component/ComponentsWsTest.java
@@ -39,7 +39,7 @@ public class ComponentsWsTest {
@ClassRule
public static final Orchestrator orchestrator = ComponentSuite.ORCHESTRATOR;
- private static Tester tester = new Tester(orchestrator);
+ private static Tester tester = new Tester(orchestrator).disableOrganizations();
@ClassRule
public static RuleChain ruleChain = RuleChain.outerRule(orchestrator).around(tester);
diff --git a/tests/src/test/java/org/sonarqube/tests/component/ModuleTest.java b/tests/src/test/java/org/sonarqube/tests/component/ModuleTest.java
index ffc3f4e1a47..37029fd7b57 100644
--- a/tests/src/test/java/org/sonarqube/tests/component/ModuleTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/component/ModuleTest.java
@@ -28,7 +28,6 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.sonarqube.qa.util.Tester;
-import org.sonarqube.ws.Organizations;
import org.sonarqube.ws.client.components.ShowRequest;
import org.sonarqube.ws.client.components.TreeRequest;
import org.sonarqube.ws.client.projects.UpdateKeyRequest;
@@ -48,14 +47,13 @@ public class ModuleTest {
@Rule
public TemporaryFolder temp = new TemporaryFolder();
@Rule
- public Tester tester = new Tester(orchestrator);
+ public Tester tester = new Tester(orchestrator).disableOrganizations();
/**
* SONAR-10536
*/
@Test
public void analyze_disabled_module_as_a_new_project() throws Exception {
- Organizations.Organization organization = tester.organizations().generate();
String projectKey = PROJECT_KEY;
String moduleKey = projectKey + ":module_a";
@@ -63,7 +61,7 @@ public class ModuleTest {
File projectWithModule = new XooProjectBuilder(projectKey)
.addModules("module_a")
.build(temp.newFolder());
- analyze(organization, projectWithModule);
+ analyze(projectWithModule);
assertThat(tester.projects().exists(moduleKey)).isTrue();
assertThat(countFilesInProject(projectKey)).isEqualTo(2 /* 1 file in project and 1 file in module */);
@@ -71,7 +69,7 @@ public class ModuleTest {
// is considered as disabled
File projectWithoutModule = new XooProjectBuilder(projectKey)
.build(temp.newFolder());
- analyze(organization, projectWithoutModule);
+ analyze(projectWithoutModule);
assertThat(tester.projects().exists(moduleKey)).isFalse();
assertThat(countFilesInProject(projectKey)).isEqualTo(1 /* 1 file in project */);
@@ -79,7 +77,7 @@ public class ModuleTest {
File moduleAsProject = new XooProjectBuilder(moduleKey)
.build(temp.newFolder());
try {
- analyze(organization, moduleAsProject);
+ analyze(moduleAsProject);
fail();
} catch (BuildFailureException e) {
assertThat(e.getResult().getLogs()).contains("The project '" + moduleKey + "' is already defined in SonarQube but as a module of project '" + projectKey + "'");
@@ -90,16 +88,14 @@ public class ModuleTest {
updateModuleKey(moduleKey, moduleKey + "_old");
// module_a can now be analyzed as a project
- analyze(organization, moduleAsProject);
+ analyze(moduleAsProject);
assertThat(tester.projects().exists(moduleKey)).isTrue();
assertThat(countFilesInProject(moduleKey)).isEqualTo(1);
assertThat(tester.wsClient().components().show(new ShowRequest().setComponent(moduleKey)).getComponent().getQualifier()).isEqualTo("TRK");
}
- private void analyze(Organizations.Organization organization, File projectDir) {
- orchestrator.executeBuild(SonarScanner.create(projectDir,
- "sonar.organization", organization.getKey(),
- "sonar.login", "admin", "sonar.password", "admin"));
+ private void analyze(File projectDir) {
+ orchestrator.executeBuild(SonarScanner.create(projectDir));
}
private int countFilesInProject(String projectKey) {
diff --git a/tests/src/test/java/org/sonarqube/tests/issue/IssueNotificationsTest.java b/tests/src/test/java/org/sonarqube/tests/issue/IssueNotificationsTest.java
index cf98015fc8d..fd4cd4841b2 100644
--- a/tests/src/test/java/org/sonarqube/tests/issue/IssueNotificationsTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/issue/IssueNotificationsTest.java
@@ -19,82 +19,58 @@
*/
package org.sonarqube.tests.issue;
-import com.google.common.collect.ObjectArrays;
import com.sonar.orchestrator.Orchestrator;
import java.io.IOException;
-import java.util.Arrays;
+import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.apache.commons.lang.RandomStringUtils;
-import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameter;
-import org.junit.runners.Parameterized.Parameters;
import org.sonarqube.qa.util.Tester;
-import org.sonarqube.tests.Category6Suite;
-import org.sonarqube.ws.Issues.Issue;
-import org.sonarqube.ws.Issues.SearchWsResponse;
-import org.sonarqube.ws.Organizations.Organization;
+import org.sonarqube.ws.Issues;
+import org.sonarqube.ws.Permissions;
import org.sonarqube.ws.Projects.CreateWsResponse.Project;
import org.sonarqube.ws.Qualityprofiles;
-import org.sonarqube.ws.Users;
import org.sonarqube.ws.Users.CreateWsResponse.User;
-import org.sonarqube.ws.client.PostRequest;
-import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.issues.AssignRequest;
import org.sonarqube.ws.client.issues.BulkChangeRequest;
import org.sonarqube.ws.client.issues.SearchRequest;
+import org.sonarqube.ws.client.notifications.AddRequest;
import org.sonarqube.ws.client.permissions.AddUserRequest;
import org.subethamail.wiser.Wiser;
import org.subethamail.wiser.WiserMessage;
import static java.lang.String.format;
import static java.util.Collections.singletonList;
+import static org.apache.commons.lang.time.DateUtils.addDays;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Fail.fail;
+import static util.ItUtils.formatDate;
import static util.ItUtils.runProjectAnalysis;
-@RunWith(Parameterized.class)
public class IssueNotificationsTest {
+ private static final String PAST_ANALYSIS_DATE = formatDate(addDays(new Date(), -30));
+
@ClassRule
- public static final Orchestrator ORCHESTRATOR = Category6Suite.ORCHESTRATOR;
+ public static final Orchestrator ORCHESTRATOR = IssueSuite.ORCHESTRATOR;
@Rule
- public Tester tester = new Tester(ORCHESTRATOR);
-
- private final static String EMAIL_TEST = "test@test.com";
- private final static String PROJECT_KEY = "sample";
+ public Tester tester = new Tester(ORCHESTRATOR).disableOrganizations();
private static Wiser smtpServer;
- private Organization organization;
- private User userWithUserRole;
- private User userWithUserRoleThroughGroups;
- private User userNotInOrganization;
-
- @Parameters
- public static List<Boolean> data() {
- return Arrays.asList(true, false);
- }
-
- @Parameter
- public boolean privateProject;
-
@BeforeClass
public static void setUp() {
smtpServer = new Wiser(0);
smtpServer.start();
- System.out.println("SMTP Server port: " + smtpServer.getServer().getPort());
}
@AfterClass
@@ -105,49 +81,30 @@ public class IssueNotificationsTest {
}
@Before
- public void before() throws Exception {
- organization = tester.organizations().generate();
-
- // Configure Sonar
+ public void before() {
tester.settings().setGlobalSettings("email.smtp_host.secured", "localhost");
tester.settings().setGlobalSettings("email.smtp_port.secured", Integer.toString(smtpServer.getServer().getPort()));
-
- clearSmtpMessages();
- checkEmailSettings();
- clearSmtpMessages();
- }
-
- @After
- public void after() {
clearSmtpMessages();
}
@Test
- public void notifications_on_new_issues_should_send_emails_to_subscribers() throws Exception {
+ public void notification_for_NewIssues() throws Exception {
String version = RandomStringUtils.randomAlphanumeric(10);
- createSampleProject(privateProject ? "private" : "public");
- createUsers();
- runAnalysis("shared/xoo-sample",
- "sonar.projectVersion", version,
- "sonar.projectDate", "2015-12-15");
-
- // If project is private userNotInOrganization will not receive and email (missing UserRole.User permission)
- waitUntilAllNotificationsAreDelivered(privateProject ? 2 : 3);
- assertThat(smtpServer.getMessages()).hasSize(privateProject ? 2 : 3);
-
- if (privateProject) {
- assertThat(extractRecipients(smtpServer.getMessages()))
- .containsExactlyInAnyOrder(
- format("<%s>", userWithUserRole.getEmail()),
- format("<%s>", userWithUserRoleThroughGroups.getEmail()));
- } else {
- assertThat(extractRecipients(smtpServer.getMessages()))
- .containsExactlyInAnyOrder(
- format("<%s>", userWithUserRole.getEmail()),
- format("<%s>", userWithUserRoleThroughGroups.getEmail()),
- format("<%s>", userNotInOrganization.getEmail()));
- }
+ Project project = tester.projects().provision();
+ createSampleQProfile(project);
+ User userReceivingNotification = tester.users().generate();
+ tester.as(userReceivingNotification.getLogin()).wsClient().notifications().add(new AddRequest().setType("NewIssues").setChannel("EmailNotificationChannel"));
+ User anotherUser = tester.users().generate();
+
+ runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample",
+ "sonar.projectKey", project.getKey(),
+ "sonar.projectDate", PAST_ANALYSIS_DATE,
+ "sonar.projectVersion", version);
+ checkNotificationSent(1);
+ assertThat(extractRecipients(smtpServer.getMessages()))
+ .containsExactlyInAnyOrder(
+ format("<%s>", userReceivingNotification.getEmail()));
extractBodies(smtpServer.getMessages()).forEach(
message -> assertThat(message)
.contains("Project: Sample")
@@ -156,72 +113,71 @@ public class IssueNotificationsTest {
.contains("Type")
.contains("Bug: ").contains("Code Smell: ").contains("Vulnerability: ")
.contains("One Issue Per Line (xoo): 17")
- .contains("More details at: http://localhost:9000/project/issues?id=sample&createdAt=2015-12-15T00%3A00%3A00%2B"));
-
- clearSmtpMessages();
+ .contains("More details at: http://localhost:9000/project/issues?id=" + project.getKey() + "&createdAt=" + PAST_ANALYSIS_DATE + "T00%3A00%3A00%2B"));
}
@Test
- public void notifications_for_issue_changes() throws Exception {
+ public void notification_for_ChangesOnMyIssue() throws Exception {
String version = RandomStringUtils.randomAlphanumeric(10);
- createSampleProject(privateProject ? "private" : "public");
- createUsers();
- runAnalysis("shared/xoo-sample",
- "sonar.projectVersion", version,
- "sonar.projectDate", "2015-12-15");
-
+ Project project = tester.projects().provision();
+ createSampleQProfile(project);
+ User user1 = tester.users().generate();
+ tester.as(user1.getLogin()).wsClient().notifications().add(new AddRequest().setType("ChangesOnMyIssue").setChannel("EmailNotificationChannel"));
+ User user2 = tester.users().generate();
+ tester.as(user2.getLogin()).wsClient().notifications().add(new AddRequest().setType("ChangesOnMyIssue").setChannel("EmailNotificationChannel"));
+ runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample",
+ "sonar.projectKey", project.getKey(),
+ "sonar.projectDate", PAST_ANALYSIS_DATE,
+ "sonar.projectVersion", version);
// Ignore the messages generated by the analysis
clearSmtpMessages();
// Change assignee
- SearchWsResponse issues = tester.wsClient().issues().search(new SearchRequest().setProjects(singletonList(PROJECT_KEY)));
- Issue issue = issues.getIssuesList().get(0);
- tester.wsClient().issues().assign(new AssignRequest().setIssue(issue.getKey()).setAssignee(userWithUserRole.getLogin()));
+ Issues.SearchWsResponse issues = tester.wsClient().issues().search(new SearchRequest().setProjects(singletonList(project.getKey())));
+ Issues.Issue issue = issues.getIssuesList().get(0);
+ tester.wsClient().issues().assign(new AssignRequest().setIssue(issue.getKey()).setAssignee(user1.getLogin()));
+ checkNotificationSent(1);
// Only the assignee should receive the email
- waitUntilAllNotificationsAreDelivered(1);
- assertThat(smtpServer.getMessages()).hasSize(1);
- assertThat(extractRecipients(smtpServer.getMessages())).containsExactly(format("<%s>", userWithUserRole.getEmail()));
-
+ assertThat(extractRecipients(smtpServer.getMessages())).containsExactly(format("<%s>", user1.getEmail()));
assertThat(extractBodies(smtpServer.getMessages()).get(0))
.contains("sample/Sample.xoo")
- .contains("Assignee changed to userWithUserRole")
- .contains("More details at: http://localhost:9000/project/issues?id=sample&issues=" + issue.getKey() + "&open=" + issue.getKey());
+ .contains(format("Assignee changed to %s", user1.getName()))
+ .contains("More details at: http://localhost:9000/project/issues?id=" + project.getKey() + "&issues=" + issue.getKey() + "&open=" + issue.getKey());
}
@Test
- public void notifications_for_personalized_emails() throws Exception {
+ public void notification_for_MyNewIssue() throws Exception {
String version = RandomStringUtils.randomAlphanumeric(10);
- // 1st analysis without any issue (because no file is analyzed)
- createSampleProject(privateProject ? "private" : "public");
- createUsers();
- tester.settings().setGlobalSettings("sonar.issues.defaultAssigneeLogin", userWithUserRole.getLogin());
+ Project project = tester.projects().provision();
+ createSampleQProfile(project);
+ // User1 is the default assignee
+ User user1 = tester.users().generate();
+ tester.as(user1.getLogin()).wsClient().notifications().add(new AddRequest().setType("SQ-MyNewIssues").setChannel("EmailNotificationChannel"));
+ tester.settings().setGlobalSettings("sonar.issues.defaultAssigneeLogin", user1.getLogin());
+ // User2 should not receive any email
+ User user2 = tester.users().generate();
+ tester.as(user2.getLogin()).wsClient().notifications().add(new AddRequest().setType("SQ-MyNewIssues").setChannel("EmailNotificationChannel"));
- runAnalysis("issue/xoo-with-scm",
+ // 1st analysis without any issue (because no file is analyzed)
+ runProjectAnalysis(ORCHESTRATOR, "issue/xoo-with-scm",
+ "sonar.projectKey", project.getKey(),
"sonar.projectVersion", version,
"sonar.scm.provider", "xoo",
"sonar.scm.disabled", "false",
"sonar.exclusions", "**/*");
-
// No email since all code is ignored
- waitUntilAllNotificationsAreDelivered(1);
- assertThat(smtpServer.getMessages()).isEmpty();
+ checkNoNotificationSent();
// run 2nd analysis which will generate issues on the leak period
- runAnalysis("issue/xoo-with-scm",
+ runProjectAnalysis(ORCHESTRATOR, "issue/xoo-with-scm",
+ "sonar.projectKey", project.getKey(),
"sonar.projectVersion", version,
"sonar.scm.provider", "xoo",
"sonar.scm.disabled", "false");
-
- // We expect to receive a notification for each subscriber with UserRole.user
- // And a personalized email for the assignee userWithUserRole
- waitUntilAllNotificationsAreDelivered(privateProject ? 3 : 4);
- assertThat(smtpServer.getMessages()).hasSize(privateProject ? 3 : 4);
-
- // the last email sent is the personalized one
- MimeMessage message = smtpServer.getMessages().get(privateProject ? 2 : 3).getMimeMessage();
-
- assertThat(message.getHeader("To", null)).isEqualTo(format("<%s>", userWithUserRole.getEmail()));
+ checkNotificationSent(1);
+ MimeMessage message = smtpServer.getMessages().get(0).getMimeMessage();
+ assertThat(message.getHeader("To", null)).isEqualTo(format("<%s>", user1.getEmail()));
assertThat(message.getSubject()).contains("You have 13 new issues");
assertThat((String) message.getContent())
.contains("Project: Sample")
@@ -232,127 +188,95 @@ public class IssueNotificationsTest {
* SONAR-4606
*/
@Test
- public void notifications_for_bulk_change_ws() throws Exception {
+ public void notification_for_bulk_change_ws() throws Exception {
String version = RandomStringUtils.randomAlphanumeric(10);
- createSampleProject(privateProject ? "private" : "public");
- createUsers();
- runAnalysis("shared/xoo-sample",
+ Project project = tester.projects().provision();
+ createSampleQProfile(project);
+ User user1 = tester.users().generate();
+ tester.as(user1.getLogin()).wsClient().notifications().add(new AddRequest().setType("ChangesOnMyIssue").setChannel("EmailNotificationChannel"));
+ User user2 = tester.users().generate();
+ tester.as(user2.getLogin()).wsClient().notifications().add(new AddRequest().setType("ChangesOnMyIssue").setChannel("EmailNotificationChannel"));
+ runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample",
+ "sonar.projectKey", project.getKey(),
"sonar.projectVersion", version,
- "sonar.projectDate", "2015-12-15");
-
- // If project is private userNotInOrganization will not receive and email (missing UserRole.User permission)
- waitUntilAllNotificationsAreDelivered(privateProject ? 2 : 3);
- assertThat(smtpServer.getMessages()).hasSize(privateProject ? 2 : 3);
+ "sonar.projectDate", PAST_ANALYSIS_DATE);
+ checkNoNotificationSent();
clearSmtpMessages();
-
- SearchWsResponse issues = tester.wsClient().issues().search(new SearchRequest().setProjects(singletonList(PROJECT_KEY)));
- Issue issue = issues.getIssuesList().get(0);
+ Issues.SearchWsResponse issues = tester.wsClient().issues().search(new SearchRequest().setProjects(singletonList(project.getKey())));
+ Issues.Issue issue = issues.getIssuesList().get(0);
// bulk change without notification by default
tester.wsClient().issues().bulkChange(new BulkChangeRequest()
.setIssues(singletonList(issue.getKey()))
- .setAssign(singletonList(userWithUserRole.getLogin()))
+ .setAssign(singletonList(user1.getLogin()))
.setSetSeverity(singletonList("MINOR")));
+ checkNoNotificationSent();
// bulk change with notification
tester.wsClient().issues().bulkChange(new BulkChangeRequest()
.setIssues(singletonList(issue.getKey()))
.setSetSeverity(singletonList("BLOCKER"))
.setSendNotifications("true"));
-
- // We are waiting for a single notification for userWithUserRole
- // for a change on MyIssues
- waitUntilAllNotificationsAreDelivered(1);
- assertThat(smtpServer.getMessages()).hasSize(1);
-
+ checkNotificationSent(1);
assertThat(extractRecipients(smtpServer.getMessages()))
- .containsExactly(format("<%s>", userWithUserRole.getEmail()));
+ .containsExactly(format("<%s>", user1.getEmail()));
assertThat(extractBodies(smtpServer.getMessages()).get(0))
.contains("sample/Sample.xoo")
.contains("Severity: BLOCKER (was MINOR)")
- .contains("More details at: http://localhost:9000/project/issues?id=sample&issues=" + issue.getKey() + "&open=" + issue.getKey());
- }
-
- private void runAnalysis(String projectRelativePath, String... extraParameters) throws Exception {
- String[] parameters = {
- "sonar.login", "admin",
- "sonar.password", "admin",
- "sonar.organization", organization.getKey()};
- runProjectAnalysis(ORCHESTRATOR, projectRelativePath,
- ObjectArrays.concat(parameters, extraParameters, String.class));
-
- // Two emails should be sent for subscribers of "New issues"
- waitUntilAllNotificationsAreDelivered(2);
+ .contains("More details at: http://localhost:9000/project/issues?id=" + project.getKey() + "&issues=" + issue.getKey() + "&open=" + issue.getKey());
}
- private void createSampleProject(String visibility) {
- // Create project
- Qualityprofiles.CreateWsResponse.QualityProfile profile = tester.qProfiles().createXooProfile(organization);
- Project project = tester.projects().provision(organization, p -> p.setProject(PROJECT_KEY)
- .setName("Sample")
- .setVisibility(visibility));
- tester.qProfiles()
- .activateRule(profile, "xoo:OneIssuePerLine")
- .assignQProfileToProject(profile, project);
- }
-
- private void createUsers() {
- // Create a user with User role
- userWithUserRole = tester.users().generateMember(organization,
- u -> u.setLogin("userWithUserRole")
- .setPassword("userWithUserRole")
- .setName("userWithUserRole")
- .setEmail("userWithUserRole@nowhere.com"));
- tester.organizations().addMember(organization, userWithUserRole);
+ @Test
+ public void notification_on_private_project() throws Exception {
+ // Create a private project using an empty permission template, in order for noone to be able to access it by default
+ Project project = tester.projects().provision(p -> p.setVisibility("private"));
+ Permissions.PermissionTemplate permissionTemplate = tester.permissions().generateTemplate();
+ tester.permissions().applyTemplate(permissionTemplate, project);
+ createSampleQProfile(project);
+ // User having browse permission on the project
+ User userWithBrowsePermission = tester.users().generate();
+ tester.as(userWithBrowsePermission.getLogin()).wsClient().notifications().add(new AddRequest().setType("NewIssues").setChannel("EmailNotificationChannel"));
tester.wsClient().permissions().addUser(
new AddUserRequest()
- .setLogin(userWithUserRole.getLogin())
- .setProjectKey(PROJECT_KEY)
+ .setLogin(userWithBrowsePermission.getLogin())
+ .setProjectKey(project.getKey())
.setPermission("user"));
- addNotificationsTo(userWithUserRole);
+ // User not having browse permission on the project
+ User userWithoutBrowsePermission = tester.users().generate();
+ tester.as(userWithoutBrowsePermission.getLogin()).wsClient().notifications().add(new AddRequest().setType("NewIssues").setChannel("EmailNotificationChannel"));
- // Create a user that have User role through Members group
- userWithUserRoleThroughGroups = tester.users().generate(
- u -> u.setLogin("userWithUserRoleThroughGroups")
- .setPassword("userWithUserRoleThroughGroups")
- .setName("userWithUserRoleThroughGroups")
- .setEmail("userWithUserRoleThroughGroups@nowhere.com"));
- tester.organizations().addMember(organization, userWithUserRoleThroughGroups);
- addNotificationsTo(userWithUserRoleThroughGroups);
+ runProjectAnalysis(ORCHESTRATOR, "shared/xoo-sample",
+ "sonar.projectKey", project.getKey(),
+ "sonar.projectDate", PAST_ANALYSIS_DATE);
+ checkNotificationSent(1);
- // Create a user that does not belongs to organization
- userNotInOrganization = tester.users().generate(
- u -> u.setLogin("userNotInOrganization")
- .setPassword("userNotInOrganization")
- .setName("userNotInOrganization")
- .setEmail("userNotInOrganization@nowhere.com"));
- addNotificationsTo(userNotInOrganization);
+ assertThat(extractRecipients(smtpServer.getMessages()))
+ .containsExactlyInAnyOrder(
+ format("<%s>", userWithBrowsePermission.getEmail()))
+ .doesNotContain(userWithoutBrowsePermission.getEmail());
}
- void checkEmailSettings() throws Exception {
- // Send test email to the test user
- tester.wsClient().wsConnector().call(new PostRequest("api/emails/send")
- .setParam("to", EMAIL_TEST)
- .setParam("message", "This is a test message from SonarQube"))
- .failIfNotSuccessful();
-
- // We need to wait until all notifications will be delivered
- waitUntilAllNotificationsAreDelivered(1);
-
- assertThat(smtpServer.getMessages()).hasSize(1);
-
- MimeMessage message = smtpServer.getMessages().get(0).getMimeMessage();
- assertThat(message.getHeader("To", null)).isEqualTo("<" + EMAIL_TEST + ">");
- assertThat((String) message.getContent()).contains("This is a test message from SonarQube");
+ private void createSampleQProfile(Project project) {
+ // Create project
+ Qualityprofiles.CreateWsResponse.QualityProfile profile = tester.qProfiles().createXooProfile();
+ tester.qProfiles()
+ .activateRule(profile, "xoo:OneIssuePerLine")
+ .assignQProfileToProject(profile, project);
}
- private static void waitUntilAllNotificationsAreDelivered(int expectedNumberOfEmails) throws InterruptedException {
- for (int i = 0; i < 5; i++) {
+ private static void checkNotificationSent(int expectedNumberOfEmails) throws InterruptedException {
+ for (int i = 0; i < 10; i++) {
if (smtpServer.getMessages().size() == expectedNumberOfEmails) {
break;
}
Thread.sleep(1_000);
}
+ assertThat(smtpServer.getMessages()).hasSize(expectedNumberOfEmails);
+ }
+
+ private static void checkNoNotificationSent() throws InterruptedException {
+ Thread.sleep(1_000);
+ assertThat(smtpServer.getMessages()).isEmpty();
}
private static void clearSmtpMessages() {
@@ -384,21 +308,4 @@ public class IssueNotificationsTest {
}
}).collect(Collectors.toList());
}
-
- private void addNotificationsTo(Users.CreateWsResponse.User user) {
- // Add notifications to the test user
- WsClient wsClient = tester.as(user.getLogin()).wsClient();
- wsClient.wsConnector().call(new PostRequest("api/notifications/add")
- .setParam("type", "NewIssues")
- .setParam("channel", "EmailNotificationChannel"))
- .failIfNotSuccessful();
- wsClient.wsConnector().call(new PostRequest("api/notifications/add")
- .setParam("type", "ChangesOnMyIssue")
- .setParam("channel", "EmailNotificationChannel"))
- .failIfNotSuccessful();
- wsClient.wsConnector().call(new PostRequest("api/notifications/add")
- .setParam("type", "SQ-MyNewIssues")
- .setParam("channel", "EmailNotificationChannel"))
- .failIfNotSuccessful();
- }
}
diff --git a/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java b/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java
index 8ff714fe6e3..cc6a0097e41 100644
--- a/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/issue/IssueSuite.java
@@ -41,6 +41,7 @@ import static util.ItUtils.xooPlugin;
IssueFilterTest.class,
IssueFilterExtensionTest.class,
IssueMeasureTest.class,
+ IssueNotificationsTest.class,
IssuePurgeTest.class,
IssueSearchTest.class,
IssueTrackingTest.class,
@@ -62,8 +63,6 @@ public class IssueSuite {
// 1 second. Required for notification test.
.setServerProperty("sonar.notifications.delay", "1")
- .setServerProperty("organization.enabled", "true")
-
.build();
}
diff --git a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueAssignTest.java b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueAssignTest.java
index 01e8e141431..bbe697112ea 100644
--- a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueAssignTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueAssignTest.java
@@ -158,7 +158,7 @@ public class OrganizationIssueAssignTest {
User otherUser = tester.users().generate();
provisionAndAnalyseProject(SAMPLE_PROJECT_KEY, organization);
- IssuesPage page = tester.openBrowser().logIn().submitCredentials(user.getLogin()).openIssues();
+ IssuesPage page = tester.openBrowser().logIn().submitCredentials(user.getLogin()).openExploreIssues();
page.getFirstIssue()
.shouldAllowAssign()
.assigneeSearchResultCount(otherUser.getLogin(), 0)
@@ -189,7 +189,7 @@ public class OrganizationIssueAssignTest {
provisionAndAnalyseProject(SAMPLE_PROJECT_KEY, organization);
IssuesPage page = tester.openBrowser()
.logIn().submitCredentials(user.getLogin())
- .openIssues();
+ .openExploreIssues();
page
.bulkChangeOpen()
.bulkChangeAssigneeSearchCount(user.getLogin(), 1)
diff --git a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java
index 85381682159..943657e0721 100644
--- a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssueSuite.java
@@ -37,6 +37,8 @@ public class OrganizationIssueSuite {
public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
.addPlugin(xooPlugin())
+ .setServerProperty("sonar.sonarcloud.enabled", "true")
+
.build();
}
diff --git a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssuesPageTest.java b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssuesPageTest.java
index 64a162edc7e..205631023f9 100644
--- a/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssuesPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/issue/OrganizationIssuesPageTest.java
@@ -24,9 +24,9 @@ import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
+import org.sonarqube.qa.util.Tester;
import org.sonarqube.qa.util.pageobjects.Navigation;
import org.sonarqube.tests.Category6Suite;
-import org.sonarqube.qa.util.Tester;
import org.sonarqube.ws.Organizations;
import org.sonarqube.ws.Users;
import util.issue.IssueRule;
@@ -74,7 +74,7 @@ public class OrganizationIssuesPageTest {
.issuesCount(2)
.componentsShouldNotContain(org1.getName());
- nav.openIssues()
+ nav.openExploreIssues()
.issuesCount(4)
.componentsShouldContain("Org ");
}
diff --git a/tests/src/test/java/org/sonarqube/tests/measure/ProjectActivityPageTest.java b/tests/src/test/java/org/sonarqube/tests/measure/ProjectActivityPageTest.java
index 49b87d55eab..3ddb07294e3 100644
--- a/tests/src/test/java/org/sonarqube/tests/measure/ProjectActivityPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/measure/ProjectActivityPageTest.java
@@ -76,7 +76,7 @@ public class ProjectActivityPageTest {
}
private ProjectActivityPage openPage() {
- String userAdmin = tester.users().generateAdministratorOnDefaultOrganization().getLogin();
+ String userAdmin = tester.users().generateAdministrator().getLogin();
return tester.openBrowser()
.logIn()
.submitCredentials(userAdmin, userAdmin)
diff --git a/tests/src/test/java/org/sonarqube/tests/measure/ProjectDashboardTest.java b/tests/src/test/java/org/sonarqube/tests/measure/ProjectDashboardTest.java
index 72c95312c0f..80176659c54 100644
--- a/tests/src/test/java/org/sonarqube/tests/measure/ProjectDashboardTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/measure/ProjectDashboardTest.java
@@ -48,7 +48,7 @@ public class ProjectDashboardTest {
@Before
public void setUp() {
- adminUser = tester.users().generateAdministratorOnDefaultOrganization().getLogin();
+ adminUser = tester.users().generateAdministrator().getLogin();
}
@Test
diff --git a/tests/src/test/java/org/sonarqube/tests/organization/BillingTest.java b/tests/src/test/java/org/sonarqube/tests/organization/BillingTest.java
index 206ea6167eb..a66254b5ebd 100644
--- a/tests/src/test/java/org/sonarqube/tests/organization/BillingTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/organization/BillingTest.java
@@ -28,7 +28,6 @@ import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.sonarqube.qa.util.Tester;
-import org.sonarqube.qa.util.pageobjects.Navigation;
import org.sonarqube.ws.Organizations;
import org.sonarqube.ws.Users.CreateWsResponse.User;
import org.sonarqube.ws.client.GetRequest;
@@ -191,7 +190,7 @@ public class BillingTest {
String projectKey = createPublicProject();
tester.settings().setGlobalSettings("sonar.billing.preventUpdatingProjectsVisibilityToPrivate", "true");
- Navigation.create(orchestrator)
+ tester.openBrowser()
.logIn().submitCredentials(orgAdministrator.getLogin())
.openProjectPermissions(projectKey)
.shouldBePublic()
diff --git a/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java b/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java
index 024a8849b41..0e77d7c2854 100644
--- a/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/organization/OrganizationSuite.java
@@ -47,5 +47,7 @@ public class OrganizationSuite {
.addPlugin(pluginArtifact("fake-billing-plugin"))
.addPlugin(pluginArtifact("ui-extensions-plugin"))
+ .setServerProperty("sonar.sonarcloud.enabled", "true")
+
.build();
}
diff --git a/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java b/tests/src/test/java/org/sonarqube/tests/project/OrganizationProjectSuite.java
index af9aba43eea..c0675b8159f 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/OrganizationProjectSuite.java
@@ -20,22 +20,51 @@
package org.sonarqube.tests.project;
import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.util.NetworkUtils;
+import java.net.InetAddress;
import org.junit.ClassRule;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import static util.ItUtils.newOrchestratorBuilder;
+import static util.ItUtils.pluginArtifact;
import static util.ItUtils.xooPlugin;
@RunWith(Suite.class)
@Suite.SuiteClasses({
+ ProjectBulkDeletionTest.class,
+ ProjectBulkDeletionPageTest.class,
+ ProjectDeletionTest.class,
+ ProjectFilterTest.class,
+ ProjectKeyUpdateTest.class,
+ ProjectKeyUpdatePageTest.class,
+ ProjectLeakPageTest.class,
+ ProjectLinksTest.class,
+ ProjectListTest.class,
+ ProjectProvisioningTest.class,
+ ProjectSearchTest.class,
+ ProjectVisibilityPageTest.class,
+ ProjectsExplorePageTest.class,
SonarCloudProjectBadgesTest.class
})
-public class SonarCloudProjectSuite {
+public class OrganizationProjectSuite {
+ static final int SEARCH_HTTP_PORT = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress());
@ClassRule
public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
- .addPlugin(xooPlugin())
+ // for ES resiliency tests
+ .setServerProperty("sonar.search.httpPort", "" + SEARCH_HTTP_PORT)
+ .setServerProperty("sonar.search.recovery.delayInMs", "1000")
+ .setServerProperty("sonar.search.recovery.minAgeInMs", "3000")
+ .setServerProperty("sonar.notifications.delay", "1")
+
.setServerProperty("sonar.sonarcloud.enabled", "true")
+
+ .addPlugin(xooPlugin())
+
+ // for ProjectSettingsTest
+ .addPlugin(pluginArtifact("sonar-subcategories-plugin"))
+
.build();
+
}
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectBadgesTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectBadgesTest.java
index fe8bc6c1f81..05d243af6e3 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectBadgesTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectBadgesTest.java
@@ -48,7 +48,7 @@ public class ProjectBadgesTest {
public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
@Rule
- public Tester tester = new Tester(orchestrator);
+ public Tester tester = new Tester(orchestrator).disableOrganizations();
@Test
public void public_project_badges() {
@@ -72,12 +72,11 @@ public class ProjectBadgesTest {
@Test
public void private_project_do_not_have_badges() {
- Organization org = tester.organizations().generate();
- User user = tester.users().generateAdministrator(org);
+ User user = tester.users().generateAdministrator();
orchestrator.executeBuild(
SonarScanner
.create(projectDir("shared/xoo-sample"))
- .setProperties("sonar.organization", org.getKey(), "sonar.login", user.getLogin(), "sonar.password", user.getLogin())
+ .setProperties("sonar.login", user.getLogin(), "sonar.password", user.getLogin())
);
tester.wsClient().projects().updateVisibility(new UpdateVisibilityRequest().setProject("sample").setVisibility("private"));
tester.openBrowser().logIn().submitCredentials(user.getLogin()).openProjectDashboard(PROJECT_KEY);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionPageTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionPageTest.java
index 65d64c732d8..4f6446d3312 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionPageTest.java
@@ -36,7 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat;
public class ProjectBulkDeletionPageTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionTest.java
index a447b97b5e6..bb06173f5b5 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectBulkDeletionTest.java
@@ -38,7 +38,7 @@ import static util.ItUtils.runProjectAnalysis;
public class ProjectBulkDeletionTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectDeletionTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectDeletionTest.java
index 5703a13fc6b..355f98138a7 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectDeletionTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectDeletionTest.java
@@ -55,13 +55,13 @@ import static util.ItUtils.projectDir;
public class ProjectDeletionTest {
@ClassRule
- public static final Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static final Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public TestRule safeguard = new DisableOnDebug(Timeout.seconds(300));
@Rule
- public Tester tester = new Tester(orchestrator).setElasticsearchHttpPort(ProjectSuite.SEARCH_HTTP_PORT);
+ public Tester tester = new Tester(orchestrator).setElasticsearchHttpPort(OrganizationProjectSuite.SEARCH_HTTP_PORT);
@Test
public void delete_project_by_web_service() {
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectFilterTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectFilterTest.java
index 83b243db7dd..c1904bb0c0d 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectFilterTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectFilterTest.java
@@ -53,7 +53,7 @@ import static util.ItUtils.sanitizeTimezones;
public class ProjectFilterTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdatePageTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdatePageTest.java
index 28abde7863b..a6789d3c74d 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdatePageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdatePageTest.java
@@ -39,7 +39,7 @@ import static util.ItUtils.projectDir;
public class ProjectKeyUpdatePageTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdateTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdateTest.java
index b1486e5f539..1afbc28366a 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdateTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectKeyUpdateTest.java
@@ -61,14 +61,14 @@ public class ProjectKeyUpdateTest {
private static final String PROJECT_KEY = "sample";
@ClassRule
- public static final Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static final Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public TestRule safeguard = new DisableOnDebug(Timeout.seconds(300));
@Rule
public TemporaryFolder temp = new TemporaryFolder();
@Rule
- public Tester tester = new Tester(orchestrator).setElasticsearchHttpPort(ProjectSuite.SEARCH_HTTP_PORT);
+ public Tester tester = new Tester(orchestrator).setElasticsearchHttpPort(OrganizationProjectSuite.SEARCH_HTTP_PORT);
@After
public void tearDown() throws Exception {
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectLeakPageTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectLeakPageTest.java
index 842b0072ea1..4b622997c9c 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectLeakPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectLeakPageTest.java
@@ -42,7 +42,7 @@ import static util.ItUtils.restoreProfile;
public class ProjectLeakPageTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectLinksTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectLinksTest.java
index ffaef594322..441ed60e9e7 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectLinksTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectLinksTest.java
@@ -44,7 +44,7 @@ import static util.ItUtils.projectDir;
public class ProjectLinksTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
private static Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectListTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectListTest.java
index 1c26c05f410..fdf71fd9811 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectListTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectListTest.java
@@ -34,7 +34,7 @@ import static util.ItUtils.projectDir;
public class ProjectListTest {
@ClassRule
- public static final Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static final Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectProvisioningTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectProvisioningTest.java
index 3e9181e7a6c..2c253402fa1 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectProvisioningTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectProvisioningTest.java
@@ -46,13 +46,13 @@ import static org.assertj.core.api.Assertions.assertThat;
public class ProjectProvisioningTest {
@ClassRule
- public static final Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static final Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public TestRule safeguard = new DisableOnDebug(Timeout.seconds(300));
@Rule
- public Tester tester = new Tester(orchestrator).setElasticsearchHttpPort(ProjectSuite.SEARCH_HTTP_PORT);
+ public Tester tester = new Tester(orchestrator).setElasticsearchHttpPort(OrganizationProjectSuite.SEARCH_HTTP_PORT);
@Test
public void provisioned_project_is_available_in_search_engines() {
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectSearchTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectSearchTest.java
index baf43119004..57589df9ce1 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectSearchTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectSearchTest.java
@@ -41,7 +41,7 @@ import static util.ItUtils.runProjectAnalysis;
public class ProjectSearchTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectSettingsTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectSettingsTest.java
index 029cf8a8b5c..a5b35a15d8e 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectSettingsTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectSettingsTest.java
@@ -40,13 +40,13 @@ public class ProjectSettingsTest {
public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
@Rule
- public Tester tester = new Tester(orchestrator);
+ public Tester tester = new Tester(orchestrator).disableOrganizations();
private String adminUser;
@Before
public void setUp() {
- adminUser = tester.users().generateAdministratorOnDefaultOrganization().getLogin();
+ adminUser = tester.users().generateAdministrator().getLogin();
}
@Test
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java
index b16447be779..b469378dce4 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectSuite.java
@@ -33,20 +33,8 @@ import static util.ItUtils.xooPlugin;
@RunWith(Suite.class)
@Suite.SuiteClasses({
ProjectBadgesTest.class,
- ProjectBulkDeletionTest.class,
- ProjectBulkDeletionPageTest.class,
- ProjectDeletionTest.class,
- ProjectFilterTest.class,
- ProjectKeyUpdateTest.class,
- ProjectKeyUpdatePageTest.class,
- ProjectLeakPageTest.class,
- ProjectLinksTest.class,
- ProjectListTest.class,
ProjectsPageTest.class,
- ProjectProvisioningTest.class,
- ProjectSearchTest.class,
- ProjectSettingsTest.class,
- ProjectVisibilityPageTest.class
+ ProjectSettingsTest.class
})
public class ProjectSuite {
static final int SEARCH_HTTP_PORT = NetworkUtils.getNextAvailablePort(InetAddress.getLoopbackAddress());
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectVisibilityPageTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectVisibilityPageTest.java
index 64db22b012d..0525c1f5c62 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectVisibilityPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectVisibilityPageTest.java
@@ -38,7 +38,7 @@ import static util.ItUtils.projectDir;
public class ProjectVisibilityPageTest {
@ClassRule
- public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectsExplorePageTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectsExplorePageTest.java
new file mode 100644
index 00000000000..4c41859ef2d
--- /dev/null
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectsExplorePageTest.java
@@ -0,0 +1,168 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonarqube.tests.project;
+
+import com.sonar.orchestrator.Orchestrator;
+import com.sonar.orchestrator.build.SonarScanner;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.sonarqube.qa.util.Tester;
+import org.sonarqube.qa.util.pageobjects.Navigation;
+import org.sonarqube.qa.util.pageobjects.projects.ProjectsPage;
+import org.sonarqube.ws.Users;
+import org.sonarqube.ws.client.PostRequest;
+import org.sonarqube.ws.client.WsClient;
+import org.sonarqube.ws.client.favorites.AddRequest;
+import org.sonarqube.ws.client.favorites.RemoveRequest;
+
+import static com.codeborne.selenide.WebDriverRunner.url;
+import static org.assertj.core.api.Assertions.assertThat;
+import static util.ItUtils.projectDir;
+
+public class ProjectsExplorePageTest {
+
+ private static final String PROJECT_KEY = "key-foo";
+
+ @ClassRule
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
+
+ private static Tester tester = new Tester(orchestrator);
+
+ @ClassRule
+ public static RuleChain ruleChain = RuleChain.outerRule(orchestrator).around(tester);
+
+ @BeforeClass
+ public static void setUp() {
+ orchestrator.executeBuild(SonarScanner.create(projectDir("shared/xoo-sample")).setProjectKey(PROJECT_KEY));
+ orchestrator.executeBuild(SonarScanner.create(projectDir("duplications/file-duplications")).setProjectKey("key-bar"));
+ }
+
+ @Test
+ public void should_display_projects() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.shouldHaveTotal(2);
+ page.getProjectByKey(PROJECT_KEY)
+ .shouldHaveMeasure("reliability_rating", "A")
+ .shouldHaveMeasure("security_rating", "A")
+ .shouldHaveMeasure("sqale_rating", "A")
+ .shouldHaveMeasure("duplicated_lines_density", "0.0%")
+ .shouldHaveMeasure("ncloc", "13")
+ .shouldHaveMeasure("ncloc", "Xoo");
+ }
+
+ @Test
+ public void should_display_facets() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.getFacetByProperty("duplications")
+ .shouldHaveValue("1", "1")
+ .shouldHaveValue("2", "0")
+ .shouldHaveValue("3", "0")
+ .shouldHaveValue("4", "0")
+ .shouldHaveValue("5", "1")
+ .shouldHaveValue("6", "0");
+ }
+
+ @Test
+ public void should_filter_using_facet() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.shouldHaveTotal(2);
+ page.getFacetByProperty("duplications").selectValue("3");
+ page.shouldHaveTotal(1);
+ }
+
+ @Test
+ public void should_add_language_to_facet() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.getFacetByProperty("languages")
+ .selectOptionItem("xoo2")
+ .shouldHaveValue("xoo2", "0");
+ }
+
+ @Test
+ public void should_add_tag_to_facet() {
+ // Add some tags to this project
+ tester.wsClient().wsConnector().call(
+ new PostRequest("api/project_tags/set")
+ .setParam("project", PROJECT_KEY)
+ .setParam("tags", "aa,bb,cc,dd,ee,ff,gg,hh,ii,jj,zz"));
+
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.getFacetByProperty("tags")
+ .shouldHaveValue("aa", "1")
+ .shouldHaveValue("ii", "1")
+ .selectOptionItem("zz")
+ .shouldHaveValue("zz", "1");
+ }
+
+ @Test
+ public void should_switch_between_perspectives() {
+ Users.CreateWsResponse.User administrator = tester.users().generateAdministratorOnDefaultOrganization();
+ ProjectsPage page = tester.openBrowser()
+ .logIn().submitCredentials(administrator.getLogin())
+ .openExploreProjects();
+ page.changePerspective("Risk");
+ assertThat(url()).endsWith("/projects?view=visualizations&visualization=risk");
+ page.changePerspective("Leak");
+ assertThat(url()).endsWith("/projects?view=leak");
+ }
+
+ @Test
+ public void should_sort_by_facet() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.sortProjects("Duplications");
+ page.getProjectByIdx(0).shouldHaveMeasure("duplicated_lines_density", "0.0%");
+ page.invertSorting();
+ page.getProjectByIdx(0).shouldHaveMeasure("duplicated_lines_density", "63.7%");
+ }
+
+ @Test
+ public void should_search_for_project() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.searchProject("s").shouldHaveTotal(2);
+ page.searchProject("sam").shouldHaveTotal(1);
+ }
+
+ @Test
+ public void should_search_for_project_and_keep_other_filters() {
+ ProjectsPage page = tester.openBrowser().openExploreProjects();
+ page.shouldHaveTotal(2);
+ page.getFacetByProperty("duplications").selectValue("3");
+ page.shouldHaveTotal(1);
+ page.searchProject("sample").shouldHaveTotal(0);
+ }
+
+ @Test
+ public void should_open_permalink() {
+ String user = tester.users().generate().getLogin();
+ Navigation nav = tester.openBrowser().logIn().submitCredentials(user);
+
+ // make a search, so its parameters saved to local storage
+ nav.openExploreProjects().changePerspective("Leak");
+
+ // change a page
+ nav.openHome();
+
+ // open a permalink to a particular visualization, it must be kept
+ nav.openProjectsWithQuery("view=visualizations&visualization=coverage");
+ assertThat(url()).contains("view=visualizations&visualization=coverage");
+ }
+}
diff --git a/tests/src/test/java/org/sonarqube/tests/project/ProjectsPageTest.java b/tests/src/test/java/org/sonarqube/tests/project/ProjectsPageTest.java
index d0a97b761a5..21126cf19ee 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/ProjectsPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/ProjectsPageTest.java
@@ -21,7 +21,6 @@ package org.sonarqube.tests.project;
import com.sonar.orchestrator.Orchestrator;
import com.sonar.orchestrator.build.SonarScanner;
-import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
@@ -35,7 +34,6 @@ import org.sonarqube.ws.client.WsClient;
import org.sonarqube.ws.client.favorites.AddRequest;
import org.sonarqube.ws.client.favorites.RemoveRequest;
-import static com.codeborne.selenide.Selenide.clearBrowserLocalStorage;
import static com.codeborne.selenide.WebDriverRunner.url;
import static org.assertj.core.api.Assertions.assertThat;
import static util.ItUtils.projectDir;
@@ -47,7 +45,7 @@ public class ProjectsPageTest {
@ClassRule
public static Orchestrator orchestrator = ProjectSuite.ORCHESTRATOR;
- private static Tester tester = new Tester(orchestrator);
+ private static Tester tester = new Tester(orchestrator).disableOrganizations();
@ClassRule
public static RuleChain ruleChain = RuleChain.outerRule(orchestrator).around(tester);
@@ -58,11 +56,6 @@ public class ProjectsPageTest {
orchestrator.executeBuild(SonarScanner.create(projectDir("duplications/file-duplications")).setProjectKey("key-bar"));
}
- @Before
- public void before() {
- clearBrowserLocalStorage();
- }
-
@Test
public void should_display_projects() {
ProjectsPage page = tester.openBrowser().openProjects();
@@ -106,7 +99,7 @@ public class ProjectsPageTest {
page.shouldHaveTotal(2).shouldDisplayAllProjectsWidthSort("-analysis_date");
// all projects by default for logged in user
- Users.CreateWsResponse.User administrator = tester.users().generateAdministratorOnDefaultOrganization();
+ Users.CreateWsResponse.User administrator = tester.users().generateAdministrator();
page = nav.logIn().submitCredentials(administrator.getLogin()).openProjects();
page.shouldHaveTotal(2).shouldDisplayAllProjects();
@@ -158,7 +151,7 @@ public class ProjectsPageTest {
@Test
public void should_switch_between_perspectives() {
- Users.CreateWsResponse.User administrator = tester.users().generateAdministratorOnDefaultOrganization();
+ Users.CreateWsResponse.User administrator = tester.users().generateAdministrator();
ProjectsPage page = tester.openBrowser()
.logIn().submitCredentials(administrator.getLogin())
.openProjects();
diff --git a/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectBadgesTest.java b/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectBadgesTest.java
index 289539b2820..f8a026857e9 100644
--- a/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectBadgesTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/project/SonarCloudProjectBadgesTest.java
@@ -46,7 +46,7 @@ public class SonarCloudProjectBadgesTest {
private static final String SONAR_CLOUD_ORANGE_BADGE = "images/project_badges/sonarcloud-orange.svg";
@ClassRule
- public static Orchestrator orchestrator = SonarCloudProjectSuite.ORCHESTRATOR;
+ public static Orchestrator orchestrator = OrganizationProjectSuite.ORCHESTRATOR;
@Rule
public Tester tester = new Tester(orchestrator);
diff --git a/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateForSmallChangesetsTest.java b/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateForSmallChangesetsTest.java
index 564f5675af9..6240442c47f 100644
--- a/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateForSmallChangesetsTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateForSmallChangesetsTest.java
@@ -21,30 +21,25 @@ package org.sonarqube.tests.qualityGate;
import com.sonar.orchestrator.Orchestrator;
import com.sonar.orchestrator.build.SonarScanner;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringReader;
-import java.nio.charset.StandardCharsets;
-import java.util.Properties;
-import org.apache.commons.io.FileUtils;
+import java.util.Date;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.sonarqube.qa.util.Tester;
-import org.sonarqube.ws.Ce;
-import org.sonarqube.ws.MediaTypes;
import org.sonarqube.ws.Organizations;
+import org.sonarqube.ws.ProjectAnalyses;
import org.sonarqube.ws.Projects.CreateWsResponse.Project;
import org.sonarqube.ws.Qualitygates;
+import org.sonarqube.ws.Qualitygates.ProjectStatusResponse.Status;
import org.sonarqube.ws.Users;
-import org.sonarqube.ws.client.GetRequest;
-import org.sonarqube.ws.client.WsResponse;
+import org.sonarqube.ws.client.projectanalyses.SearchRequest;
import org.sonarqube.ws.client.qualitygates.CreateConditionRequest;
import org.sonarqube.ws.client.qualitygates.ProjectStatusRequest;
import org.sonarqube.ws.client.qualitygates.UpdateConditionRequest;
+import static org.apache.commons.lang.time.DateUtils.addMonths;
import static org.assertj.core.api.Assertions.assertThat;
-import static util.ItUtils.getMeasure;
+import static util.ItUtils.formatDate;
import static util.ItUtils.projectDir;
public class OrganizationQualityGateForSmallChangesetsTest {
@@ -56,7 +51,7 @@ public class OrganizationQualityGateForSmallChangesetsTest {
public Tester tester = new Tester(orchestrator);
@Test
- public void do_not_fail_quality_gate_with_poor_LEAK_coverage_and_a_max_of_19_lines_of_NEW_code() throws Exception {
+ public void do_not_fail_quality_gate_with_poor_LEAK_coverage_and_a_max_of_19_lines_of_NEW_code() {
Organizations.Organization organization = tester.organizations().generate();
Project project = tester.projects().provision(organization);
Qualitygates.CreateResponse qualityGate = tester.qGates().generate(organization);
@@ -83,11 +78,10 @@ public class OrganizationQualityGateForSmallChangesetsTest {
.setProperty("sonar.password", password)
.setProperty("sonar.scm.provider", "xoo")
.setProperty("sonar.scm.disabled", "false")
- .setProperty("sonar.projectDate", "2013-04-01")
+ .setProperty("sonar.projectDate", formatDate(addMonths(new Date(), -4)))
.setDebugLogs(true);
orchestrator.executeBuild(analysis);
- assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("OK");
- assertIgnoredConditions("qualitygate/small-changesets/v1-1000-lines", false);
+ verifyGateStatus(project, Status.OK, false);
// small leak => ignore coverage warning or error
SonarScanner analysis2 = SonarScanner
@@ -98,11 +92,10 @@ public class OrganizationQualityGateForSmallChangesetsTest {
.setProperty("sonar.password", password)
.setProperty("sonar.scm.provider", "xoo")
.setProperty("sonar.scm.disabled", "false")
- .setProperty("sonar.projectDate", "2014-04-01")
+ .setProperty("sonar.projectDate", formatDate(addMonths(new Date(), -3)))
.setDebugLogs(true);
orchestrator.executeBuild(analysis2);
- assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("OK");
- assertIgnoredConditions("qualitygate/small-changesets/v2-1019-lines", true);
+ verifyGateStatus(project, Status.OK, true);
// small leak => if coverage is OK anyways, we do not have to ignore anything
tester.wsClient().qualitygates().updateCondition(new UpdateConditionRequest()
@@ -121,11 +114,10 @@ public class OrganizationQualityGateForSmallChangesetsTest {
.setProperty("sonar.password", password)
.setProperty("sonar.scm.provider", "xoo")
.setProperty("sonar.scm.disabled", "false")
- .setProperty("sonar.projectDate", "2014-04-02")
+ .setProperty("sonar.projectDate", formatDate(addMonths(new Date(), -2)))
.setDebugLogs(true);
orchestrator.executeBuild(analysis3);
- assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("OK");
- assertIgnoredConditions("qualitygate/small-changesets/v2-1019-lines", false);
+ verifyGateStatus(project, Status.OK, false);
// big leak => use usual behaviour
tester.wsClient().qualitygates().updateCondition(new UpdateConditionRequest()
@@ -144,40 +136,21 @@ public class OrganizationQualityGateForSmallChangesetsTest {
.setProperty("sonar.password", password)
.setProperty("sonar.scm.provider", "xoo")
.setProperty("sonar.scm.disabled", "false")
- .setProperty("sonar.projectDate", "2014-04-03")
+ .setProperty("sonar.projectDate", formatDate(addMonths(new Date(), -1)))
.setDebugLogs(true);
orchestrator.executeBuild(analysis4);
- assertThat(getMeasure(orchestrator, project.getKey(), "alert_status").getValue()).isEqualTo("ERROR");
- assertIgnoredConditions("qualitygate/small-changesets/v2-1020-lines", false);
+ verifyGateStatus(project, Status.ERROR, false);
}
- private void assertIgnoredConditions(String projectDir, boolean expected) throws IOException {
- String analysisId = getAnalysisId(getTaskIdInLocalReport(projectDir(projectDir)));
- boolean ignoredConditions = tester.wsClient().qualitygates()
+ private void verifyGateStatus(Project project, Status expectedStatus, boolean expectedIgnoredConditions) {
+ ProjectAnalyses.SearchResponse analysis = tester.wsClient().projectAnalyses().search(new SearchRequest().setProject(project.getKey()));
+ String analysisId = analysis.getAnalysesList().get(0).getKey();
+ Qualitygates.ProjectStatusResponse.ProjectStatus gateStatus = tester.wsClient().qualitygates()
.projectStatus(new ProjectStatusRequest().setAnalysisId(analysisId))
- .getProjectStatus()
- .getIgnoredConditions();
- assertThat(ignoredConditions).isEqualTo(expected);
- }
+ .getProjectStatus();
- private String getAnalysisId(String taskId) throws IOException {
- WsResponse activity = tester.wsClient()
- .wsConnector()
- .call(new GetRequest("api/ce/task")
- .setParam("id", taskId)
- .setMediaType(MediaTypes.PROTOBUF));
- Ce.TaskResponse activityWsResponse = Ce.TaskResponse.parseFrom(activity.contentStream());
- return activityWsResponse.getTask().getAnalysisId();
+ assertThat(gateStatus.getStatus()).isEqualTo(expectedStatus);
+ assertThat(gateStatus.getIgnoredConditions()).isEqualTo(expectedIgnoredConditions);
}
- private String getTaskIdInLocalReport(File projectDirectory) throws IOException {
- File metadata = new File(projectDirectory, ".sonar/report-task.txt");
- assertThat(metadata).exists().isFile();
- // verify properties
- Properties props = new Properties();
- props.load(new StringReader(FileUtils.readFileToString(metadata, StandardCharsets.UTF_8)));
- assertThat(props.getProperty("ceTaskId")).isNotEmpty();
-
- return props.getProperty("ceTaskId");
- }
}
diff --git a/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java b/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java
index 985f8b3a3dc..f91b9cdfbba 100644
--- a/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/qualityGate/OrganizationQualityGateSuite.java
@@ -40,6 +40,7 @@ public class OrganizationQualityGateSuite {
public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
// required for notification tests
.setServerProperty("sonar.notifications.delay", "1")
+ .setServerProperty("sonar.sonarcloud.enabled", "true")
.addPlugin(pluginArtifact("posttask-plugin"))
.addPlugin(xooPlugin())
diff --git a/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateTest.java b/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateTest.java
index 05f7871f364..151bdc1d4a9 100644
--- a/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/qualityGate/QualityGateTest.java
@@ -60,7 +60,6 @@ import org.sonarqube.ws.client.qualitygates.SelectRequest;
import org.sonarqube.ws.client.qualitygates.SetAsDefaultRequest;
import org.sonarqube.ws.client.qualitygates.UpdateConditionRequest;
-import static java.lang.String.format;
import static org.apache.commons.lang.RandomStringUtils.randomAlphabetic;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.groups.Tuple.tuple;
@@ -251,13 +250,13 @@ public class QualityGateTest {
Qualitygates.CreateResponse qualityGate = tester.qGates().generate();
expectHttpError(400,
- format("Invalid value 'INVALID' for metric 'ncloc'"),
+ "Invalid value 'INVALID' for metric 'Lines of Code'",
() -> tester.qGates().service().createCondition(new CreateConditionRequest().setGateId(Long.toString(qualityGate.getId())).setMetric("ncloc").setOp("GT").setWarning("INVALID")));
expectHttpError(400,
- format("User '%s' is not member of organization '%s'"),
+ "Invalid value '10d' for metric 'Technical Debt'",
() -> tester.qGates().service().createCondition(new CreateConditionRequest().setGateId(Long.toString(qualityGate.getId())).setMetric("sqale_index").setOp("GT").setWarning("10d")));
expectHttpError(400,
- format("User '%s' is not member of organization '%s'"),
+ "Invalid value '10%' for metric 'Coverage'",
() -> tester.qGates().service().createCondition(new CreateConditionRequest().setGateId(Long.toString(qualityGate.getId())).setMetric("coverage").setOp("GT").setWarning("10%")));
}
diff --git a/tests/src/test/java/org/sonarqube/tests/serverSystem/HttpHeadersTest.java b/tests/src/test/java/org/sonarqube/tests/serverSystem/HttpHeadersTest.java
index 5b8688a4201..5eead374ed4 100644
--- a/tests/src/test/java/org/sonarqube/tests/serverSystem/HttpHeadersTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/serverSystem/HttpHeadersTest.java
@@ -20,7 +20,6 @@
package org.sonarqube.tests.serverSystem;
import com.sonar.orchestrator.Orchestrator;
-import org.sonarqube.tests.Category4Suite;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
@@ -29,6 +28,7 @@ import okhttp3.Response;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
+import org.sonarqube.tests.Category4Suite;
import static com.google.common.io.Files.getFileExtension;
import static org.assertj.core.api.Assertions.assertThat;
@@ -77,7 +77,7 @@ public class HttpHeadersTest {
@Test
public void verify_headers_of_css() {
- Response response = call(orchestrator.getServer().getUrl() + "/css/sonar." + JS_HASH + ".css");
+ Response response = call(orchestrator.getServer().getUrl() + "/css/main." + JS_HASH + ".css");
verifySecurityHeaders(response);
verifyContentType(response, "text/css");
@@ -86,7 +86,7 @@ public class HttpHeadersTest {
@Test
public void verify_headers_of_js() {
- Response response = call(orchestrator.getServer().getUrl() + "/js/app." + JS_HASH + ".js");
+ Response response = call(orchestrator.getServer().getUrl() + "/js/main." + JS_HASH + ".js");
verifySecurityHeaders(response);
verifyContentType(response, "application/javascript");
@@ -152,8 +152,9 @@ public class HttpHeadersTest {
String fileName = Files.list(cssFolder.toPath())
.map(path -> path.toFile().getName())
.filter(name -> getFileExtension(name).equals("css"))
+ .filter(name -> name.startsWith("main"))
.findFirst()
- .orElseThrow(() -> new IllegalStateException("sonar.css hasn't been found"));
- return fileName.replace("sonar.", "").replace(".css", "");
+ .orElseThrow(() -> new IllegalStateException("css file hasn't been found"));
+ return fileName.replace("main.", "").replace(".css", "");
}
}
diff --git a/tests/src/test/java/org/sonarqube/tests/settings/ValidatorsTest.java b/tests/src/test/java/org/sonarqube/tests/settings/ValidatorsTest.java
index 99bd3191ce9..d1c73059120 100644
--- a/tests/src/test/java/org/sonarqube/tests/settings/ValidatorsTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/settings/ValidatorsTest.java
@@ -78,7 +78,8 @@ public class ValidatorsTest {
.assertSettingValueCanBeSaved(elementSelector)
.assertSettingValueCanBeCanceled(elementSelector);
- page.clickOnCancel(elementSelector).assertSettingValueIsNotedAsDefault(elementSelector);
+ page.clickOnCancel(elementSelector)
+ .assertSettingValueIsNotedAsDefault(elementSelector);
}
@Test
@@ -116,7 +117,8 @@ public class ValidatorsTest {
.assertSettingValueCanBeSaved(elementSelector)
.assertSettingValueCanBeCanceled(elementSelector);
- page.clickOnCancel(elementSelector).assertInputCount(elementSelector, 1);
+ page.clickOnCancel(elementSelector)
+ .assertInputCount(elementSelector, 1);
}
private void analyzeSample() {
diff --git a/tests/src/test/java/org/sonarqube/tests/user/NotificationsWsTest.java b/tests/src/test/java/org/sonarqube/tests/user/NotificationsWsTest.java
index 2dc9de4022c..5874195280c 100644
--- a/tests/src/test/java/org/sonarqube/tests/user/NotificationsWsTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/user/NotificationsWsTest.java
@@ -97,7 +97,7 @@ public class NotificationsWsTest {
@Test
public void add_global_and_project_notifications_on_another_user_as_a_system_administrator() {
- Users.CreateWsResponse.User admin = tester.users().generateAdministratorOnDefaultOrganization();
+ Users.CreateWsResponse.User admin = tester.users().generateAdministrator();
Users.CreateWsResponse.User user = tester.users().generate();
assertThat(tester.as(user.getLogin()).wsClient().notifications().list(new ListRequest()).getNotificationsList()).isEmpty();
Projects.CreateWsResponse.Project project = tester.projects().provision();
@@ -114,7 +114,7 @@ public class NotificationsWsTest {
@Test
public void remove_global_and_project_notifications_on_another_user_as_a_system_administrator() {
- Users.CreateWsResponse.User admin = tester.users().generateAdministratorOnDefaultOrganization();
+ Users.CreateWsResponse.User admin = tester.users().generateAdministrator();
Users.CreateWsResponse.User user = tester.users().generate();
assertThat(tester.as(user.getLogin()).wsClient().notifications().list(new ListRequest()).getNotificationsList()).isEmpty();
Projects.CreateWsResponse.Project project = tester.projects().provision();
diff --git a/tests/src/test/java/org/sonarqube/tests/user/SonarCloudUserSuite.java b/tests/src/test/java/org/sonarqube/tests/user/SonarCloudUserSuite.java
index afc1db96145..b0a677fe7aa 100644
--- a/tests/src/test/java/org/sonarqube/tests/user/SonarCloudUserSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/user/SonarCloudUserSuite.java
@@ -25,6 +25,7 @@ import org.junit.ClassRule;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
+import static util.ItUtils.newOrchestratorBuilder;
import static util.ItUtils.xooPlugin;
@RunWith(Suite.class)
@@ -35,7 +36,7 @@ import static util.ItUtils.xooPlugin;
public class SonarCloudUserSuite {
@ClassRule
- public static final Orchestrator ORCHESTRATOR = Orchestrator.builderEnv()
+ public static final Orchestrator ORCHESTRATOR = newOrchestratorBuilder()
.addPlugin(xooPlugin())
.setServerProperty("sonar.sonarcloud.enabled", "true")
diff --git a/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java b/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java
index e3bc89f9269..8e8d0023081 100644
--- a/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java
+++ b/tests/src/test/java/org/sonarqube/tests/webhook/WebhooksSuite.java
@@ -41,5 +41,7 @@ public class WebhooksSuite {
// reduce memory for Elasticsearch
.setServerProperty("sonar.search.javaOpts", "-Xms128m -Xmx128m")
+ .setServerProperty("sonar.sonarcloud.enabled", "true")
+
.build();
}